You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HttpClient获取远程文件大小时流量过高,请求排查代码问题

修正后的HttpClient实现

改成用HEAD请求,只获取响应头来读取Content-Length,这样流量消耗就和HttpWebRequest一致了:

HttpClientHandler handler = new HttpClientHandler() { 
    Proxy = null, 
    UseProxy = false, 
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate 
};
var client = new HttpClient(handler);
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36");
// 注意:HEAD请求不需要设置Accept为application/json,也不用AcceptEncoding(因为没有响应体)
client.DefaultRequestHeaders.ConnectionClose = true;
client.DefaultRequestHeaders.Add("Referer", uriPath.AbsoluteUri);
client.DefaultRequestHeaders.Add("Origin", "https://www.samplesite.com");

using (HttpResponseMessage response = await client.SendAsync(
    new HttpRequestMessage(HttpMethod.Head, uriPath), 
    HttpCompletionOption.ResponseHeadersRead, 
    token).ConfigureAwait(false)) 
{
    response.EnsureSuccessStatusCode();
    // 读取Content-Length头
    if (response.Content.Headers.TryGetValues("Content-Length", out var values))
    {
        return values.FirstOrDefault();
    }
    return null;
}

额外优化建议
  • HttpClient建议复用实例,不要每次请求都新建,不然会导致socket资源泄漏,影响性能。
  • 如果目标服务器不支持HEAD请求,你可以继续用GET但只读取响应头、不下载响应体,但这种情况还是HEAD请求更规范省流量。

内容的提问来源于stack exchange,提问作者zackmark15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:42:58