我有一个async
方法,它在.Net
中反复调用HttpClient
。我将我的代码模拟为下面的一个小的控制台应用程序:
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
。
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
的,所以我想让它在上面工作。任何建议都将不胜感激。
发布于 2021-08-29 03:46:06
在循环的每一次迭代中,您都在添加DefaultRequestHeaders。这意味着它们将在您的周期的每次迭代中反复添加到HttpClient的全局实例中
根据the official docs的说法,这些报头将随每个请求一起发送。对于您的特定任务,您可能只添加一次它们(这就是名称包含前缀default的原因)。
因此,如果您稍微重写代码,如下所示:
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);
}
}
它应该工作得很好。
https://stackoverflow.com/questions/68972396
复制相似问题