.NET 中的 HttpResponseMessage returns 403
HttpResponseMessage returns 403 in .NET
我有一个 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
我想让它在上面工作。
如有任何建议,我们将不胜感激。
在循环的每次迭代中,您都在添加 DefaultRequestHeaders。
这意味着它们将在您的循环的每次迭代中一次又一次地添加到 HttpClient
的全局实例
根据 the official docs,这些 headers 将随每个请求一起发送。
对于您的特定任务,您可能只添加一次(这就是名称包含前缀默认值的原因。)
因此,如果您像这样稍微重写代码:
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);
}
}
应该没问题。
我有一个 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
我想让它在上面工作。
如有任何建议,我们将不胜感激。
在循环的每次迭代中,您都在添加 DefaultRequestHeaders。 这意味着它们将在您的循环的每次迭代中一次又一次地添加到 HttpClient
的全局实例根据 the official docs,这些 headers 将随每个请求一起发送。 对于您的特定任务,您可能只添加一次(这就是名称包含前缀默认值的原因。)
因此,如果您像这样稍微重写代码:
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);
}
}
应该没问题。