尝试下载CSV文件时HttpWebResponse失败

时间:2020-07-21 13:56:14

标签: c# httpwebrequest httpwebresponse

我正在尝试从纳斯达克下载CSV的历史数据。当我在请求上调用GetResponse方法时,代码不起作用。这是无效的代码:

string url = "https://www.nasdaq.com/api/v1/historical/A/stocks/2019-07-19/2020-07-19";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

响应永远不会回来,只是超时。有时它给我一个404错误。如果我将URL粘贴到浏览器中,则可以正常下载。任何帮助,将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

根据HttpWebRequest文档:

我们不建议您将HttpWebRequest用于新开发。而是使用System.Net.Http.HttpClient类。

由于@mjwills绝对正确地保留在注释中,因此该服务器需要Accept-EncodingConnection标头。

简短控制台示例

public class Program
{
    private static readonly HttpClient httpClient = new HttpClient();

    static async Task Main(string[] args)
    {
        httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
        httpClient.DefaultRequestHeaders.Connection.ParseAdd("keep-alive");

        string url = "https://www.nasdaq.com/api/v1/historical/A/stocks/2019-07-19/2020-07-19";
        string text = await httpClient.GetStringAsync(url);
        Console.WriteLine(text);

        Console.ReadKey();
    }
}

输出

Date, Close/Last, Volume, Open, High, Low
07/17/2020, $94.37, 3463585, $93.41, $94.51, $92.69
07/16/2020, $92.86, 1226388, $92.98, $93.21, $92.06
07/15/2020, $92.88, 1897108, $91.74, $93.06, $91.08
07/14/2020, $90.69, 1361240, $88.83, $90.79, $88.07
. . .
. . .