#c# #.net #httprequest
#c# #.net #httprequest
Вопрос:
я использую: `private void get_stocks_data() { байт[] результат; байт [] буфер = новый байт [4096];
WebRequest wr = WebRequest.Create("http://www.tase.co.il/TASE/Pages/ExcelExport.aspx?sn=he-IL_dsamp;enumTblType=AllSecuritiesamp;Columns=he-IL_Columnsamp;Titles=he-IL_Titlesamp;TblId=0amp;ExportType=1");
using (WebResponse response = wr.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
} while (count != 0);
result = memoryStream.ToArray();
write_data_to_excel(result);
}
}
}`
чтобы загрузить файл Excel,
И этот метод для заполнения файла на моем компьютере:
private void write_data_to_excel(byte[] input)
{
StreamWriter str = new StreamWriter("stockdata.xls");
for (int i = 0; input.Length > i; i )
{
str.WriteLine(input[i].ToString());
}
str.Close();
}
В результате я получаю много чисел…
Что я делаю не так? загружаемый файл — это Excel версии 2003, на моем компьютере у меня 2007…
Спасибо.
Ответ №1:
Я бы посоветовал вам использовать WebClient.DownloadFile()
вместо этого.
Это метод более высокого уровня, который абстрагируется от создания запроса вручную, работы с кодировкой и т.д.
Комментарии:
1. Хорошо, использование WebClientgives дает некоторый прогресс… но я не загружаю правильный URL… на странице, с которой я загружаю, есть кнопка на его кнопке, которую следует нажать, а затем выбрать загрузку формата Excel 2003 … итак, какой URL я должен указать? страница находится по адресу tase.co.il/TASE/Products/Stocks/MarketData и файл excel выдается при нажатии кнопки на кнопке, на которой есть значок Excel, а затем при выборе excel 2003 (и начале загрузки)… какой URL-адрес я должен указать?
2. В моем случае URL был tase.co.il/TASE/Pages /… {0BDA5110-EF93-44CB-A0F0-468C6F502B51}amp;ExportType= 1, но, похоже, он содержит какой-то токен сеанса, поэтому в нем может быть нечто большее, чем просто получение URL
Ответ №2:
Проблема в вашей функции Write_data_to_excel,
поскольку вы используете StreamWriter.WriteLine
метод, ему нужна строка,
вы передаете байт как строку, поэтому ваше двоичное значение, скажем, 10, теперь будет строкой 10,
попробуйте FileStream f = File.OpenWrite("stockdata.xlsx");
, это сработает.
f.Write(input,0,input.Length);
Комментарии:
1. Хорошо, это работает… но теперь я вижу, что загружаю неправильный URL… на странице, с которой я загружаю, есть кнопка на его кнопке, которую следует нажать, а затем выбрать загрузку формата Excel 2003 … итак, какой URL я должен указать? страница находится по адресу tase.co.il/TASE/Products/Stocks/MarketData и файл Excel выдается при нажатии кнопки на кнопке, на которой есть значок Excel, а затем при выборе Excel 2003 (и начале загрузки)… какой URL-адрес я должен указать? Спасибо.
2. На самом деле кнопка Excel запускает еще одну страницу
javascript:customWindowOpen('/TASE/Pages/ExcelExport.aspx?sn=noneamp;enumTblType=allSharesamp;Columns=noneColumnsamp;Titles=noneTitlesamp;action=1amp;SubAction=0amp;GridId=33amp;CurGuid={727FE319-7530-460E-9444-E9FB85BCF378}amp;ExportType=1', '_blank', 'scrollbars=yes; toolbar=yes; menubar=yes; resizable=yes', 800, 450);return false;
поэтому вы должны вызвать ‘/TASE/Pages/ExcelExport.aspx’ со всеми аргументами, как указано выше, но вам нужно найти параметр to (GridID и CurGuid) каждый раз, когда вы хотите вызвать страницу.