使用凭证的HttpWebRequest问题

时间:2018-03-09 11:12:12

标签: c#

我正在使用以下命令向server发送请求。服务器中的Service是使用此身份验证在python中编写的。 @ auth.requires_login()。网址是正确的,凭据是正确的。我直接打了电话。和没有身份验证的服务器调用。所以当我使用凭证时问题就会出现。 你的问题是未经授权的访问。 python中的webservices正在使用装饰器。

WebRequest myWebRequest = HttpWebRequest.Create(url);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;
NetworkCredential myNetworkCredential = new NetworkCredential(username, password);
CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(url, "Digest", myNetworkCredential);
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.Credentials = myCredentialCache;
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream responseStream = myWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
string pageContent = myStreamReader.ReadToEnd();
responseStream.Close();
myWebResponse.Close();
return pageContent;

1 个答案:

答案 0 :(得分:1)

我假设问题在于,当您运行此代码时,服务器会将您的请求视为您的匿名用户,而不是由usernamepassword标识的用户。< / p>

在你的问题中,你说:

  

我直接打过电话。以及没有认证的服务器调用。

这意味着您的Web服务器允许匿名连接。如果是这样,您的摘要网络凭证将永远不会被使用,因为Web服务器将始终响应初始的匿名请求。

由于HTTP使用质询 - 响应身份验证模型,因此当您向服务器发出第一个请求时,客户端将不会使用您的授权发送授权标头(无论PreAuthenticate的设置如何)。 HttpWebRequest将期望如果服务器需要身份验证,它将返回401 Unauthorised响应,然后客户端将在第二个请求中发送凭据。

如果您需要这种服务可以接受经过身份验证的客户端或匿名客户端的行为,则可以在服务器上创建两个单独的URL,一个接受匿名请求,另一个不接受。

希望这有帮助