亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HttpClient 返回 0 字節

HttpClient 返回 0 字節

C#
MMTTMM 2023-08-20 10:57:24
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”。你能幫我理解這里的問題是什么,我做錯了什么嗎?
查看完整描述

1 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

通過網絡瀏覽器下載.pdf文件時,我注意到在開發人員工具中,附加標頭被添加到請求中: Accept-Encoding: gzip, deflate等等,這將在響應內容中攜帶文件,而不是留下長度0 就像你的原始代碼一樣。


有多種方法可以修復代碼:

HttpClient.DefaultRequestHeaders

_client.DefaultRequestHeaders.Add("Accept-Encoding",?"gzip");
_client.DefaultRequestHeaders.Add("Accept-Encoding",?"deflate");

HttpClientHandler.AutomaticDecompression

var?handler?=?new?HttpClientHandler();
handler.AutomaticDecompression?=?DecompressionMethods.GZip?|?DecompressionMethods.Deflate;
var?_client?=?new?HttpClient(handler);

HttpRequestHeaders.AcceptEncoding

var 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


查看完整回答
反對 回復 2023-08-20
  • 1 回答
  • 0 關注
  • 194 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號