HttpClient 返回 0 字节

GetByteArrayAsync两者GetStreamAsync都返回 0 字节或空流。我想将收到的字节写入文件。


我尝试过使用byte[] stream = await _httpClient.GetByteArrayAsync("http://gscs-b2c.lge.com/downloadFile?fileId=BZhqND5RTnHcyMRDCeJJQ")and _httpClient.GetStreamAsync("http://gscs-b2c.lge.com/downloadFile?fileId=BZhqND5RTnHcyMRDCeJJQ"),但它们都返回 0 字节或空流。


我已经从 PostMan 尝试过,作为 Get 请求,它返回了一个有效的 PDF 文件。我已经从浏览器中尝试过,它返回一个有效的 PDF 文件。但在代码中它返回空文件(0 字节)。我检查了其他答案,但仍然无法解决这个问题。有趣的是,它适用于其他网站的其他 pdf 文件。


以下是我正在使用的 .net Core 2.2 中的示例代码


_client = new HttpClient();

_client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36");

_client.Timeout = TimeSpan.FromMinutes(2);


System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;


var downloadPdfLink = "http://gscs-b2c.lge.com/downloadFile?fileId=BZhqND5RTnHcyMRDCeJJQ";

using (Stream stream = await _client.GetStreamAsync(downloadPdfLink))

{

    using (var fs = new FileStream("./file/myfile.pdf",FileMode.CreateNew,FileAccess.Write))

    {

        //stream.Seek(0, SeekOrigin.Begin);

        stream.CopyTo(fs);

    }

}

预期的结果应该是返回的流被写入“myfile.pdf”。你能帮我理解这里的问题是什么,我做错了什么吗?


MMTTMM
浏览 136回答 1
1回答

汪汪一只猫

通过网络浏览器下载.pdf文件时,我注意到在开发人员工具中,附加标头被添加到请求中: Accept-Encoding: gzip, deflate等等,这将在响应内容中携带文件,而不是留下长度0 就像你的原始代码一样。有多种方法可以修复代码:HttpClient.DefaultRequestHeaders_client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip"); _client.DefaultRequestHeaders.Add("Accept-Encoding", "deflate");HttpClientHandler.AutomaticDecompressionvar handler = new HttpClientHandler(); handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; var _client = new HttpClient(handler);HttpRequestHeaders.AcceptEncodingvar request = new HttpRequestMessage(HttpMethod.Get, downloadPdfLink);request.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));request.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));using (HttpResponseMessage response = await _client.SendAsync(request)){    using (Stream stream = await response.Content.ReadAsStreamAsync())    {        Directory.CreateDirectory("./file");        using (var fs = new FileStream("./file/myfile.pdf", FileMode.Create, FileAccess.Write))        {            //stream.Seek(0, SeekOrigin.Begin);            stream.CopyTo(fs);        }    }}并且,作为一个友好的提醒,一旦你完成了它,不要忘记Dispose()你的。HttpClient
打开App,查看更多内容
随时随地看视频慕课网APP