Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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# HTTP客户端未向代理服务器C进行身份验证#_C#_Authentication_Proxy - Fatal编程技术网

C# HTTP客户端未向代理服务器C进行身份验证#

C# HTTP客户端未向代理服务器C进行身份验证#,c#,authentication,proxy,C#,Authentication,Proxy,我正在尝试使用凭据从客户端站点的windows服务向代理服务器进行身份验证,但不断收到以下响应: 状态代码:407,原因短语:“需要代理身份验证”,版本:1.1,内容:System.Net.Http.StreamContent,标题: { Pragma:没有缓存 代理连接:关闭 连接:关闭 缓存控制:无缓存 代理身份验证:NTLM 设置Cookie:BCSI-CS-2737f33ff5b5f739=2;路径=/ 内容长度:1351 内容类型:文本/html;字符集=utf-8 } 我的本地代理配

我正在尝试使用凭据从客户端站点的windows服务向代理服务器进行身份验证,但不断收到以下响应:

状态代码:407,原因短语:“需要代理身份验证”,版本:1.1,内容:System.Net.Http.StreamContent,标题: {
Pragma:没有缓存
代理连接:关闭
连接:关闭
缓存控制:无缓存
代理身份验证:NTLM
设置Cookie:BCSI-CS-2737f33ff5b5f739=2;路径=/
内容长度:1351
内容类型:文本/html;字符集=utf-8
}

我的本地代理配置完全不同,我无法重新创建该问题。下面是我用来向服务器进行身份验证的代码。(如本规范所述,其依据是:

私有HttpClient GenerateHttpClientWithProxySettings()
{
//基于https://stackoverflow.com/questions/29856543/httpclient-and-using-proxy-constantly-getting-407
//首先创建一个代理对象
var proxy=new WebProxy()
{
地址=新Uri($“{Settings.ProxyAddress}:{Settings.PortNumber}”),
旁路ProxyOnLocal=false,
UseDefaultCredentials=false,
//***这些凭据提供给代理服务器,而不是web服务器***
凭据=新网络凭据(
用户名:Settings.ProxyUserName,
密码:设置。代理密码)
};
//调试:
Settings.log.Debug($“{Settings.ProxyAddress}:{Settings.PortNumber}”);
Settings.log.Debug(Settings.ProxyUserName);
Settings.log.Debug(Settings.ProxyPassword);
//现在创建一个使用该代理的客户机处理程序
var httpClientHandler=新的httpClientHandler()
{
Proxy=代理,
UseProxy=true,
AllowAutoRedirect=true,
};
////如果不需要使用web服务器进行身份验证,请忽略此部分:
//如果(需要服务器身份验证)
//{
//httpClientHandler.PreAuthenticate=true;
//httpClientHandler.UseDefaultCredentials=false;
////***这些凭据提供给web服务器,而不是代理服务器***
//httpClientHandler.Credentials=新网络凭据(
//用户名:serverUserName,
//密码:serverPassword);
//}
//最后,创建HTTP客户机对象
HttpClient客户端=新的HttpClient(处理程序:httpClientHandler,disposeHandler:true);
返回客户;
}
//得到
专用异步任务GetRequestWithProxy(字符串url)
{
ReturnedData结果=新的ReturnedData();
使用(HttpClient client=GenerateHttpClientWithProxySettings())
{
使用(HttpResponseMessage=wait client.GetAsync(url))
{
Settings.log.Debug(“[[message:]]”);
Settings.log.Debug(message.ToString());
result.StatusCode=message.StatusCode.ToString();
result.succeded=message.issuccesstatuscode;
使用(HttpContent=message.content)
{
Settings.log.Debug(“[[content:]]”);
Settings.log.Debug(content.ToString());
result.Content=wait message.Content.ReadAsStringAsync();
返回结果;
}
}
}
}
//职位
专用异步任务PostRequestWithProxy(字符串url,动态负载)
{
ReturnedData结果=新的ReturnedData();
string stringPayload=wait Task.Run(()=>JsonConvert.SerializeObject(有效负载));
//将JSON封装在StringContent中,然后HttpClient类可以使用它
使用(var httpContent=newstringcontent(stringPayload,Encoding.UTF8,“application/json”))
{
使用(HttpClient client=GenerateHttpClientWithProxySettings())
{
使用(HttpResponseMessage=wait client.PostAsync(url,httpContent))
{
Settings.log.Debug(message.ToString());
result.StatusCode=message.StatusCode.ToString();
result.succeded=message.issuccesstatuscode;
使用(HttpContent=message.content)
{
Settings.log.Debug(content.ToString());
result.Content=wait message.Content.ReadAsStringAsync();
返回结果;
}
}
}
}
}
对于我在这里做错的任何帮助,我们都将不胜感激


谢谢!

来自响应标题

Proxy-Authenticate: NTLM
代理接受Windows凭据而不是用户名/密码

试试这个

var proxy = new WebProxy()
{
    ...
    UseDefaultCredentials = true
    /*Credentials = new NetworkCredential(
        userName: Settings.ProxyUserName,
        password: Settings.ProxyPassword)*/
};

Windows服务在哪个帐户下运行?系统还是登录用户?
var proxy = new WebProxy()
{
    ...
    UseDefaultCredentials = true
    /*Credentials = new NetworkCredential(
        userName: Settings.ProxyUserName,
        password: Settings.ProxyPassword)*/
};