【发布时间】:2020-05-30 10:15:46
【问题描述】:
尝试使用以下代码调用远程服务器,我总是从服务器获得未经授权的异常:
HttpWebRequest webRequest;
var myURI = "https://myURI";
webRequest = (HttpWebRequest)WebRequest.Create(myURI);
webRequest.Method = "GET";
string myCredentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("myUsername" + ":" + "myPassword"));
webRequest.Headers.Add("Authorization", "Basic " + myCredentials);
HttpWebResponse webResponse;
webResponse = (HttpWebResponse)webRequest.GetResponse();
string response = string.Empty;
using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
{
response = sr.ReadToEnd();
sr.Close();
}
System.Net.WebException: '远程服务器返回错误:(401) Unauthorized.'
WWW-Authenticate: Basic realm="geoserver"
缓存控制:代理重新验证
连接:保持活动状态
设置-Cookie:BCSI-CS-**********=1;路径=/
代理支持:基于会话的身份验证
内容类型:文本/纯文本; charset=UTF-8
内容长度:23
这有点奇怪,因为如果我(几乎)通过邮递员尝试相同的事情,它可以工作并且我从远程服务器获得正确的响应(没有 401)。
我也尝试了其他方法,例如以下代码,但没有任何帮助:
CredentialCache cc = new CredentialCache();
cc.Add(
new Uri("https://mywebserver/webpage"),
"Basic", //also tried NTLM
new NetworkCredential("user", "password"));
webRequest.Credentials = cc;
如果我尝试使用相同的代码调用其他服务器,它可以工作。
【问题讨论】:
-
使用像wireshark或fiddler这样的嗅探器,比较来自Postman的第一个请求和c#中的第一个请求。使请求中的 c# 标头看起来像邮递员。 c# 中的默认标头与 Postman 不同。
标签: c# .net proxy httpwebrequest