Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基本身份验证和SSL失败的Web请求(GET)_C#_Ssl_Httpwebrequest_Basic Authentication - Fatal编程技术网

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

C# 基本身份验证和SSL失败的Web请求(GET),c#,ssl,httpwebrequest,basic-authentication,C#,Ssl,Httpwebrequest,Basic Authentication,我已经浏览了stackoverflow中的所有问题,但我仍然无法使我的请求生效。服务器我没有访问权限,所以我不知道那里发生了什么,总是用403响应 有人告诉我,我必须使用带HTTPS的Basic Auth。起初,我尝试了邮递员铬插件,它的工作非常完美。Fiddler说邮差发出了这个请求: GET https://mypage.com/api/topic HTTP/1.1 Host: mypage.com Connection: keep-alive Authorization: Basic as

我已经浏览了stackoverflow中的所有问题,但我仍然无法使我的请求生效。服务器我没有访问权限,所以我不知道那里发生了什么,总是用403响应

有人告诉我,我必须使用带HTTPS的Basic Auth。起初,我尝试了邮递员铬插件,它的工作非常完美。Fiddler说邮差发出了这个请求:

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

很明显,我们缺少了一些东西。我想知道哪些像用户代理?是非常重要的,我希望您能帮助我解决这个问题。

我可以发誓,我已经尝试过以这种方式设置标题。也许我被困太久了,犯了一个错误

因此,我的解决方案如下:

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

感谢上帝,它现在起作用了。

真正重要的是授权。看起来,即使您设置了request.Credentials,它也不会被发送。看看这个答案,它有一个关于如何为ssl创建凭据的示例。WebRequest有点奇怪。我过去也遇到过一些问题,只需搜索StackOverflow,直到找到一个生成类似授权头的方法。另外,您发送了一个带有SessionID的cookie,这可能非常重要,但我无法确定。服务器通常不会检查其他标题,但您的输入可能会检查KS@x4rf41。那篇文章的答案也不起作用。我必须手动设置标题。它从未与NetworkCredentials一起工作过。。。但这让我在stackoverflow上找到了另一个帮助我解决问题的帖子。耶!