基本身份验证和SSL失败的Web请求(GET)

时间:2015-09-27 20:51:33

标签: c# ssl httpwebrequest basic-authentication

我浏览了stackoverflow中的所有问题,但我仍然无法让我的请求正常工作。服务器(我无法访问它,所以我不知道那里发生了什么)总是响应403。

我被告知必须使用HTTPS进行Basic Auth。起初我尝试使用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

显然有些事情遗失了。我想知道哪些(如用户代理?)真的很重要,我希望你能帮我解决问题。

1 个答案:

答案 0 :(得分:0)

我可以发誓我已经尝试过这样设置标题了。可能我被困了太久而犯了错误......

所以这是我的解决方案:

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);

感谢上帝,它现在有效。