migallo Ответов: 3

Загрузите CSV-файл с неизвестным местоположением с URL-адреса


Привет, кто-нибудь может объяснить мне, как я могу загрузить в VB или C# CSV-файл со следующего URL-адреса? Как вы можете видеть, URL-адрес не содержит имени файла, который я могу загрузить, когда получаю доступ к URL-адресу.

https://www.nasdaq.com/api/v1/historical/AMZN/stocks/2020-07-20/2020-07-22

Когда я получаю доступ к этому URL-адресу, я получаю возможность сохранить CSV на своем компьютере, но мне нужно сделать это в коде, автоматически, потому что мне нужно получить несколько файлов с разными датами.


Заранее большое спасибо!

Что я уже пробовал:

Я уже некоторое время изучаю эту проблему, и все, что я мог найти, - это решения, которые делают то, что я хочу, когда имя файла содержится как часть URL-адреса, но, как вы можете видеть выше, в моем случае имя файла не содержится в URL-адресе.

3 Ответов

Рейтинг:
0

Sandeep Mewara

Если вы используете какой-либо сетевой инструмент (проще всего было бы использовать опцию browser Developer Tools), вы можете увидеть, что запрос сделан по url-адресу и ответ получен.

Ответ имеет тип: application/csv
Ответная полезная нагрузка вместе с ней.

Эта полезная нагрузка может быть сохранена как ожидаемый тип ответа (CSV) в виде простого сохранения файла (потока) на диске.


migallo

Большое вам спасибо за этот Сандип, мои навыки кодирования очень ограничены. Проблема, которую я получаю, заключается в том, что когда я пытаюсь получить ответ, он выходит из строя. Вызов ниже GetResponse() возвращает это исключение: "System.Net.WebException: 'произошла ошибка при отправке запроса. Невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный промежуток времени, или установленное соединение не удалось, потому что подключенный хост не ответил.' "

Не могли бы вы указать мне правильное направление?

Саб Тест()
Dim req As HttpWebRequest = HttpWebRequest.Создать("https://www.nasdaq.com/api/v1/historical/AMZN/stocks/2020-07-20/2020-07-22")
Dim res As HttpWebResponse = req.метод GetResponse()
- спаси рек.метод GetResponse.GetResponseStream() на диск
РЭС.Рядом()
Конец Подводной Лодки


Большое спасибо!!

Sandeep Mewara

используя (Stream file = файл.Создать("цитаты.КШМ"))
{
request = (HttpWebRequest)WebRequest.CreateDefault(новый Uri(url));
запрос.Тайм-аут = 30000;
var response = (HttpWebResponse)request.GetResponse();
using (Stream input = response.GetResponseStream())
{
CopyStream(input, file);
}
}

migallo

Привет, все еще не везет... та же проблема. Вызов GetResponse() продолжает возвращать одно и то же исключение. Я не думаю, что это проблема тайм-аута... если вы откроете URL-адрес на новой странице, то ответом будет только файл, а страница вообще не будет возвращена. Я думаю, что это может быть связано с этим. Точный код, который я запускаю, находится ниже:

static void Main(string[] args)
{

используя (Stream file = файл.Create("quotesAMZN.csv"))
{
var request = (HttpWebRequest)WebRequest.CreateDefault(новый Uri("https://www.nasdaq.com/api/v1/historical/AMZN/stocks/2020-07-20/2020-07-22"));
запрос.Тайм-аут = 30000;
var response = (HttpWebResponse)request.GetResponse();
using (Stream input = response.GetResponseStream())
{
вход.CopyTo(файл);
}
}
Приставка.WriteLine("Привет, Мир!");
}



System.Net.WebException: 'при отправке запроса произошла ошибка. Невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный промежуток времени, или установленное соединение не удалось, потому что подключенный хост не ответил.'

Sandeep Mewara

Установите это перед вызовом Webrequest и посмотрите:

Servicepointmanager и.Expect100Continue = true;
Servicepointmanager и.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;

migallo

Привет Сандип, то же исключение, что и раньше... :( "Ssl3", по-видимому, устарел и не компилируется, но вместо этого я включил "Tls13", который был доступен в качестве опции.

Полный код, который я запускаю, находится ниже:

static void Main(string[] args)
{
Servicepointmanager и.Expect100Continue = true;
Servicepointmanager и.SecurityProtocol = SecurityProtocolType.СС | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
используя (Stream file = файл.Create("quotesAMZN.csv"))
{
var request = (HttpWebRequest)WebRequest.CreateDefault(новый Uri("https://www.nasdaq.com/api/v1/historical/AMZN/stocks/2020-07-20/2020-07-22"));
запрос.Тайм-аут = 30000;
var response = (HttpWebResponse)request.GetResponse();
using (Stream input = response.GetResponseStream())
{
вход.CopyTo(файл);
}
}
Приставка.WriteLine("Завершено!");
}

migallo

Привет, Сандип, мне удалось найти решение на другом форуме. Строки ниже сделали трюк! :)

запрос.AllowWriteStreamBuffering = false;
запрос.Принимать = "*/*";

Sandeep Mewara

Здорово знать, что ваш запрос решен!

migallo

Большое спасибо за вашу помощь!!

Рейтинг:
0

Richard MacCutchan

Очевидным местом для поиска было бы Nasdaq Data on Demand API Reference[^].


migallo

Спасибо тебе за это, Ричард. Я уже потратил некоторое время на чтение ссылки, прежде чем задать этот вопрос, но не смог найти ничего полезного для решения проблемы, с которой я столкнулся.

Рейтинг:
0

migallo

static void Main(string[] args)
{
используя (Stream file = файл.Создать("C:\\Temp\\quotes.csv"))
{
var request = (HttpWebRequest)WebRequest.CreateDefault(новый Uri("https://www.nasdaq.com/api/v1/historical/AMZN/stocks/2020-07-20/2020-07-22"));
запрос.Тайм-аут = 30000;
запрос.AllowWriteStreamBuffering = false;
запрос.Принимать = "*/*";

var response = (HttpWebResponse)request.GetResponse();
Вход потока = ответ.GetResponseStream();
вход.CopyTo(файл);

}
Приставка.WriteLine("Завершено!");
}