【问题标题】:How do I fix the Problem Error 404 from Webclient如何解决来自 Webclient 的问题错误 404
【发布时间】:2022-03-23 19:58:59
【问题描述】:

大家好,

我的代码有问题。大约一周以来,我的代码在没有任何更改的情况下不再工作。我很确定,我的能力应该可以工作。我得到的只是错误 404:禁止。 下面是我的代码的 sn-p。我还阅读了有关添加 webclient 的标头的信息,但没有帮助。还有其他建议吗?如果我的语法不是很好,我很抱歉,这是我在 stackoverflow 上的第一篇文章。
提前致谢!
            string epicId = "ManuelNotManni";
            WebClient webClient = new WebClient();
            Uri uri = new Uri("https://api.tracker.gg/api/v2/rocket-league/standard/profile/epic/");
            string result = String.Empty;
            try
            {
                string website = $"{uri.ToString()}{epicId}?";
                result = webClient.DownloadString(website);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error:\n{ex}");
                Console.ReadLine();
            }
            finally
            {
                webClient.Dispose();
            }

这是确切的错误:

System.Net.WebException:远程服务器返回错误:(403)禁止。 在 System.Net.HttpWebRequest.GetResponse() 在 System.Net.WebClient.GetWebResponse(WebRequest 请求) 在 System.Net.WebClient.DownloadBits(WebRequest 请求,流 writeStream) 在 System.Net.WebClient.DownloadDataInternal(Uri 地址,WebRequest& 请求) 在 System.Net.WebClient.DownloadString(Uri 地址) 在 System.Net.WebClient.DownloadString(字符串地址) 在 TestProject.Program.Main(String[] args) in > C:\Users\Manue\source\repos\TestProject\Program.cs:line 17

【问题讨论】:

  • 看起来 API 不允许在没有任何凭据的情况下调用此 API。那就是你得到这个错误。您需要查看 API 文档和 API 支持以了解需要哪些凭据以及如何传递它们。

标签: c# webclient


【解决方案1】:

你是对的。您的代码应该可以正常工作。 问题是您请求的 URL 实际上是:

https://api.tracker.gg/api/v2/rocket-league/standard/profile/epic/ManuelNotManni?

这在任何情况下都会返回 403 状态代码 - 无论您使用的是浏览器、您的代码还是例如 postman。 我建议在使用邮递员时查看响应正文。

显示这个

<html class="no-js" lang="en-US">
<!--<![endif]-->

<head>

    <title>Attention Required! | Cloudflare</title>

    <meta name="captcha-bypass" id="captcha-bypass" />

【讨论】:

  • 感谢您的回答,这很奇怪,因为当我将 Google Chrome 与您在上面正确编写的 Url 一起使用时,我确实得到了我想要的字符串。即使有邮递员,我也确实得到了一些东西。不完全是我想要的,但它不会引发错误。
  • 好的,我需要撤销我的声明。你对邮递员的部分是正确的。它说:状态 403 禁止请求是合法请求,但服务器拒绝响应它。与 401Unauthorized 响应不同,身份验证不会有任何区别但是我写的 chrome 部分是正确的,所以还有其他想法吗? :)
【解决方案2】:

Tracker.gg 希望 API 用户在获得 API 访问权限之前向他们注册他们的应用。

你需要做的是首先前往their Getting Started page. 在这里你必须创建一个应用程序,它应该会给你一个身份验证密钥。

完成此操作后,您希望稍微更改代码以添加身份验证标头。比如这样:

        var webClient = new WebClient();
        webclient.Headers.Add("TRN-Api-Key", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")

作为旁注,WebClient has been deprecated 建议从现在开始使用 HttpClient。这是您使用 HttpClient 的代码:

var epicId = "ManuelNotManni";
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("TRN-Api-Key", "YOUR API KEY GOES HERE");
// Simplifying Uri creation:
var uri = new Uri($"https://api.tracker.gg/api/v2/rocket-league/standard/profile/epic/{epicId}");
var result = string.Empty; // C# prefers lowercase string
try
{
    var response = await httpClient.GetAsync(uri);
    if (response.IsSuccessStatusCode)
    {
        result = await response.Content.ReadAsStringAsync();
    }
    else
    {
        Console.WriteLine($"Unable to retrieve data for {epicId}.");
        Console.WriteLine($"Statuscode: {response.StatusCode}");
        Console.WriteLine($"Reason: {response.ReasonPhrase}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error:\n{ex}");
    Console.ReadLine();
}
finally
{
    httpClient.Dispose();
}

【讨论】:

    【解决方案3】:

    当我们违反 Cloudflare 设置的防火墙规则时会发生这种情况,您可以访问此博客了解更多详细信息。 https://community.cloudflare.com/t/community-tip-fixing-error-1020-access-denied/66439

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2019-11-03
      相关资源
      最近更新 更多