首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.NET中,HttpResponseMessage返回403

在.NET中,HttpResponseMessage返回403
EN

Stack Overflow用户
提问于 2021-08-29 11:23:40
回答 1查看 30关注 0票数 0

我有一个async方法,它在.Net中反复调用HttpClient。我将我的代码模拟为下面的一个小的控制台应用程序:

代码语言:javascript
复制
    private static HttpClient req { get; set; } = new HttpClient();

    static async Task Main(string[] args)
    {
        Console.WriteLine("Please press enter to start healthCheck");
        Console.ReadLine();

        healthCheck();

        Console.ReadLine();
    }

    private static async Task healthCheck()
    {
        while (true)
        {
            req.DefaultRequestHeaders.Add("apikey", "myPassword");

            string strUrl = "http://myUrl";

            HttpResponseMessage hrm = await req.GetAsync(strUrl);

            Console.WriteLine("=> statusCode:" + (int)hrm.StatusCode);

            await Task.Delay(5000);
        }
    }

输出为:

问题是,当我使用Postman或者像下面这样用python编写代码时,每次它都响应200而不是403

代码语言:javascript
复制
import requests as req
import time as t

url = "http://adpsms.adpdigital.com/report/?date=2021-08-30"
customHeader = {"apikey": "sssrjdIiGisbViKA"}

i = 10

while (i > 0):
    response = req.get(url, headers = customHeader)

    print("statusCode: " + str(response.status_code))

    i -= 1
    t.sleep(5)

我认为这是一个服务器错误,但当我每次用python响应200时,我明白这将是我的代码或基于客户端的东西的问题。

因为我的项目是基于.NET的,所以我想让它在上面工作。任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-29 11:46:06

在循环的每一次迭代中,您都在添加DefaultRequestHeaders。这意味着它们将在您的周期的每次迭代中反复添加到HttpClient的全局实例中

根据the official docs的说法,这些报头将随每个请求一起发送。对于您的特定任务,您可能只添加一次它们(这就是名称包含前缀default的原因)。

因此,如果您稍微重写代码,如下所示:

代码语言:javascript
复制
private static HttpClient req { get; set; } = new HttpClient();

    static async Task Main(string[] args)
    {
        Console.WriteLine("Please press enter to start healthCheck");
        Console.ReadLine();
        AddDefaultHeaders();
        healthCheck();
    
        Console.ReadLine();
    }
    
    private static void AddDefaultHeaders()
    {
        req.DefaultRequestHeaders.Add("apiKey", "myPassword");
    }

    private static async Task healthCheck()
    {
        while (true)
        {
            string strUrl = "http://myUrl";
    
            HttpResponseMessage hrm = await req.GetAsync(strUrl);
    
            Console.WriteLine("=> statusCode:" + (int)hrm.StatusCode);
    
            await Task.Delay(5000);
        }
    }

它应该工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68972396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档