【发布时间】:2021-02-02 12:36:22
【问题描述】:
我尝试使用以下 C# 代码从可以手动访问的 url 获取响应。
static void Main(string[] args)
{
Uri theRequestUriString = new Uri("<<<my_url>>>");
var request = WebRequest.Create(theRequestUriString);
request.UseDefaultCredentials = true;
WebProxy myproxy = new WebProxy("<<<my_proxy>>>:<<<my_port>>>", true);
request.Proxy = myproxy;
request.Timeout = Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
request.Credentials = CredentialCache.DefaultCredentials;
string textResponse;
var resp = request.GetResponse();//*****401 error here*****
using (var sr = new StreamReader(resp.GetResponseStream()))
{
textResponse = sr.ReadToEnd().Trim();
}
}
System.Net.WebException: 'The remote server returned an error: (401) Unauthorized.'
我可以手动去那里,但如果我尝试使用此代码,则会得到 401 Unauthorized。 CredentialCache 不应该处理这个问题吗?如果不是这样,我将在本地使用 Visual Studio。
如果 url 改为 https://www.yahoo.com,那么这很好。
【问题讨论】:
-
“为什么我的 http 请求不起作用”问题的第一条规则。首先让它在 Postman 中工作。第二条规则,然后用Ffiddler算出postman和C#代码的区别
-
401 是服务器响应。关于您的请求的某些内容不满足服务器的要求,因此它认为您没有被授权。为了进一步解释为什么我们不能只给你一个解决方案:我可以用这样的东西编写一个服务器应用程序:
if (today == Friday && (priceOfCookiesAtStarBucks > 100 || weather == Rainy)) { return 401; }。如果您调用我的 API,如果满足这些条件,您将收到 401 响应。 -
Cookie 永远不应该这么贵,但我真的很喜欢这个例子。
标签: c# asp.net request http-get