.net C# HTTP GET返回404找不到

u5rb5r59  于 2022-12-24  发布在  .NET
关注(0)|答案(1)|浏览(401)

我尝试下载. webp图像,它总是返回404,但如果我硬编码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);

StatusCode
parsedApiResponse包含来自API (将图像保存在服务器上并返回其位置) 的字符串回复,带有指向. webp图像的完整路径。
uri1包含硬编码的parsedApiResponse,带有从完全相同的早期调用手动复制到其他映像的路径。
response2从绝对相同的请求(没有硬编码的URI)返回...这个(Fiddler屏幕截图:)时,response1返回的正是它应该返回的。
raw inspection of successful request
raw inspection of fail request
这是绝对相同的!没有自定义的标题,没有内容,但响应是不同的。如果我将日志和复制uri2的路径,然后将粘贴到uri1的地方,它将变成相同的方式。
response2的内容是一个完整的cloudflare 404页面,但主要部分说:

<section id="text">
  <div>
    <h1>Error 404</h1>
    <h3>This object could not be viewed</h3>
  </div>

  <div>
    <p id="error-title">**You are not authorized to view this object**</p>
    <p>
            This object does not exist or is not publicly accessible at this
            URL. Check the URL of the object that you're looking for or contact
            the owner to enable Public access.
    </p>
  </div>

  <div>
    <p id="footer-title">Is this your bucket?</p>
    <p>
      Learn how to enable
      <a
        href="https://developers.cloudflare.com/r2/data-access/public-buckets/">Public Access
      </a>
    </p>
  </div>
</section>

我已经尝试过使用一些HttpClientHandler参数,尝试过使用其他客户端,如RestClientWebClient,尝试过传递所有可能的头来模仿我的浏览器和许多其他东西-没有结果。这可能是什么?为什么它需要一些授权?硬编码的URI如何获得这些凭据?...🤯

xiozqbni

xiozqbni1#

这是服务器端问题。

由于某种原因,服务器创建了图像路径,并在图像本身完全上传之前用它响应。这就是为什么它是Not found的原因。如果你遇到类似的问题,首先尝试在时间上有一些延迟的多个请求:

public static async Task<byte[]?> DownloadImg(string url)
{
    HttpClient client = new();

    for (int i = 0; i < 10; i++)
    {
        try { return await client.GetByteArrayAsync(url); }
        catch { Thread.Sleep(2000); }
    }

    return null;
}

相关问题