【发布时间】:2022-01-12 10:33:09
【问题描述】:
我尝试创建简单的控制台应用程序,在其中向 url 发送请求并读取收到的响应代码:
HttpWebRequest 实现
HttpWebRequest init = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)init.GetResponse();
Console.WriteLine(resp.StatusCode);
RestSharp 实现
var client = new RestClient(url);
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.StatusCode);
在大多数情况下,它都能完美运行。但是当网站重定向到另一个页面或端口时(通常是使用反向代理编写的 .net 页面,例如https://www.eventim.pl/),程序会尝试发送请求但从未得到任何响应。
我尝试使用:
//HttpWebRequest
init.AllowAutoRedirect = true;
//RestSharp
client.FollowRedirects = true;
但是情况也是一样的,请求发送了,但是从来没有收到响应,以超时结束。
编辑一:HttpClient 实现
HttpClient client = new HttpClient();
try
{
HttpResponseMessage response = await client.GetAsync("https://www.eventim.pl");
response.EnsureSuccessStatusCode();
var res = response.StatusCode;
Console.WriteLine((int)res);
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
在这种情况下,它也会在到达response.EnsureSuccessStatusCode();之前超时
【问题讨论】:
-
你为什么不用
HttpClient? -
我在问题中添加了
HttpClient实现。在这种情况下,我得到了同样的结果 - 在response.StatusCode之前超时