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

C# HTTP GET请求获取WebP图片返回404,硬编码URI却正常

问题:HttpClient请求API返回的WebP图片URI报404,但硬编码/浏览器访问正常

问题描述

使用C#的HttpClient下载WebP格式图片时,通过API返回的URI(uri2)发起GET请求始终返回404 Not Found,但硬编码相同格式的URI(uri1)或在浏览器中打开该URI却能正常返回200并获取图片。

代码示例

string uri1 = "https://some.site/static/.../.../0.webp";
string uri2 = parsedApiResponse;
var response1 = client.GetAsync(uri1).Result;
var response2 = client.GetAsync(uri2).Result;
Log($"{response1.StatusCode}\n", ConsoleColor.Magenta);
Log($"{response2.StatusCode}\n", ConsoleColor.Yellow);

关键细节

  • parsedApiResponse是API返回的图片完整路径(API会将图片保存到服务器并返回其位置),uri1是手动复制的之前API返回的同格式图片路径
  • Fiddler抓包显示两个请求的原始内容完全一致,无自定义头和内容,但响应结果不同
  • 将uri2的路径复制硬编码为uri1后,请求可正常返回200
  • uri2的响应为Cloudflare的404页面,核心提示:

    你无权查看此对象
    此对象不存在或在此URL下无法公开访问。请检查你要查找的对象的URL,或联系所有者以启用公开访问。

已尝试的无效方案

  • 调整HttpClientHandler参数
  • 更换为RestClient/WebClient发起请求
  • 模拟浏览器请求头

可能的原因分析

  • URI包含隐形字符:API返回的uri2可能带有不可见的空白字符(如全角空格、换行符、制表符),或者存在编码差异(比如特殊字符未正确编码/解码)。手动复制硬编码时这些隐形字符会被自动过滤,因此请求正常。
  • 大小写或字符细微差异:服务器路径区分大小写,uri2中可能存在大小写错误,或者有容易混淆的字符(如下划线/连字符、数字0/字母O),肉眼难以察觉但服务器会判定为不同路径。
  • 临时链接过期:API返回的URI可能是带有效期的临时授权链接,代码请求时链接已过期,但手动复制测试时仍在有效期内(不过这种情况浏览器打开也会失效,可能性较低)。
  • Cloudflare隐形验证:虽然抓包显示请求头一致,但HttpClient的TLS指纹、会话特征可能和浏览器不同,触发了Cloudflare的反爬验证,而硬编码测试时可能复用了浏览器的有效会话。

解决建议

  1. 清理URI中的隐形字符:对uri2执行uri2 = uri2.Trim().Replace("\n", "").Replace("\r", "").Replace("\t", "")后再发起请求
  2. 逐字符对比uri1和uri2:将两个字符串转为字节数组,逐字节检查差异,排查大小写、字符替换问题
  3. 用Uri类解析验证:创建Uri对象解析uri2,对比AbsoluteUri属性与uri1是否完全一致
  4. 检查API返回的URI参数:确认是否包含签名、过期时间等参数,排查解析过程中是否丢失了关键参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:25:37