基本身份验证和 SSL 失败的 Web 请求 (GET)
Web request (GET) with Basic Auth and SSL failing
我浏览了 Whosebug 中的所有问题,但我的请求仍然无法正常工作。服务器(我无法访问它,所以我不知道那边发生了什么)总是以 403 响应。
我被告知我必须通过 HTTPS 使用基本身份验证。起初我用 PostMan(Chrome 附加组件)尝试了它并且它工作得很好。 Fiddler 说 PostMan 已经发送了这个请求:
GET https://mypage.com/api/topic HTTP/1.1
Host: mypage.com
Connection: keep-alive
Authorization: Basic asdfasdfasdfasdfasdfasdf
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
Postman-Token: 7363b868-cc6e-1dff-d5d0-c7a0c1924fa7
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=imxY132456123Scai90Nrsv
我想在我们的 C# 应用程序中重现此内容,但无论我尝试什么,我都会从服务器获得 403 响应。这是我尝试过的 C# 中的(一个)版本:
NetworkCredential nc = new NetworkCredential(Login, Password);
CredentialCache cc = new CredentialCache();
cc.Add("mypage.com", 443, "Basic", nc);
WebRequest request = WebRequest.Create("https://mypage.com/api/topic");
request.Credentials = cc;
request.PreAuthenticate = true;
request.Method = "GET";
WebResponse response = request.GetResponse();
根据Fiddler的说法就是这样发送的:
GET https://mypage.com/api/topic HTTP/1.1
Host: mypage.com
Connection: Keep-Alive
显然缺少一些东西。我想知道哪些(比如用户代理?)是真正必要的,我希望你能帮我解决这个问题。
我可以发誓我已经尝试过完全按照这种方式设置 headers。可能是我卡的时间太久,弄错了...
所以这是我的解决方案:
string auth = Convert.ToBase64String(Encoding.Default.GetBytes(Login + ":" + Password));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mypage.com/api/topic");
request.Headers.Add("Authorization", "Basic " + auth);
谢天谢地,现在可以用了。
我浏览了 Whosebug 中的所有问题,但我的请求仍然无法正常工作。服务器(我无法访问它,所以我不知道那边发生了什么)总是以 403 响应。
我被告知我必须通过 HTTPS 使用基本身份验证。起初我用 PostMan(Chrome 附加组件)尝试了它并且它工作得很好。 Fiddler 说 PostMan 已经发送了这个请求:
GET https://mypage.com/api/topic HTTP/1.1
Host: mypage.com
Connection: keep-alive
Authorization: Basic asdfasdfasdfasdfasdfasdf
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
Postman-Token: 7363b868-cc6e-1dff-d5d0-c7a0c1924fa7
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=imxY132456123Scai90Nrsv
我想在我们的 C# 应用程序中重现此内容,但无论我尝试什么,我都会从服务器获得 403 响应。这是我尝试过的 C# 中的(一个)版本:
NetworkCredential nc = new NetworkCredential(Login, Password);
CredentialCache cc = new CredentialCache();
cc.Add("mypage.com", 443, "Basic", nc);
WebRequest request = WebRequest.Create("https://mypage.com/api/topic");
request.Credentials = cc;
request.PreAuthenticate = true;
request.Method = "GET";
WebResponse response = request.GetResponse();
根据Fiddler的说法就是这样发送的:
GET https://mypage.com/api/topic HTTP/1.1
Host: mypage.com
Connection: Keep-Alive
显然缺少一些东西。我想知道哪些(比如用户代理?)是真正必要的,我希望你能帮我解决这个问题。
我可以发誓我已经尝试过完全按照这种方式设置 headers。可能是我卡的时间太久,弄错了...
所以这是我的解决方案:
string auth = Convert.ToBase64String(Encoding.Default.GetBytes(Login + ":" + Password));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mypage.com/api/topic");
request.Headers.Add("Authorization", "Basic " + auth);
谢天谢地,现在可以用了。