如何在不使用默认代理的情况下在WCF客户端上以编程方式设置HTTP代理?
代理,代理,代理.
根据WCF开发模型,我通过在服务的WSDL上运行svcutil.exe来生成客户端"代理"类.(这也会产生客户端配置文件).
在我的代码中,我新建了该类的一个实例,我可以连接到该服务.非常好.
var svcProxy = new MyWebService();
svcProxy.GetInformation(request);
Run Code Online (Sandbox Code Playgroud)
我们将此事称为代理类,但还有另一个代理 - http代理.这个服务使用wsHttpBinding basicHttpBinding,所以它通过http.现在,假设我想通过http代理将客户端连接到Web服务(由.NET BCL中的System.Net.WebProxy建模).我从阅读.NET和WCF文档的丰富,愉快的经验中了解到,如果没有另外指示,WCF运行时将通过http/https进行通信时使用默认系统代理.
我可以使用此处所述的ProxyCfg.exe从WinXP/2003中的命令行进行设置,也可以使用此处所述的netsh.exe在更高版本的Windows中进行设置.
我还可以通过设置System.Net.WebRequest.DefaultWebProxy属性来指定在应用程序中使用的默认Web代理.
但是假设我想通过与系统范围代理不同的代理连接?例如,可能没有系统范围的代理,但我需要特别使用一个用于Web服务.或者可能有一个系统范围的代理,但我需要使用另一个代理,用于Web服务.事实上,可能有多个Web服务客户端,每个客户端应该有一个不同的代理.
如何为每个绑定设置代理?
在ASMX模型中,我可以这样做:
var svcProxy = new MyWebService();
svcProxy.Proxy = new System.Net.WebProxy("http://proxyserver:1234", true);
svcProxy.GetInformation(request);
Run Code Online (Sandbox Code Playgroud)
但是WCF不可能做到这一点; WCF生成的客户端代理类不公开Proxy属性.如何为每个客户端代理设置http代理,以及如何在http代理上设置身份验证?
相关:
- 如何设置代理与凭证到生成的wcf-client
Git通过设置http.proxy配置参数在代理环境中工作.
对于某些地址,我需要绕过代理.是否有无代理/绕过代理配置参数?
当您尝试从GitHub的存储库安装一些R包时
install_github('rWBclimate', 'ropensci')
Run Code Online (Sandbox Code Playgroud)
如果您有以下错误:
Installing github repo(s) rWBclimate/master from ropensci
Downloading rWBclimate.zip from https://github.com/ropensci/rWBclimate/archive/master.zip
Error in function (type, msg, asError = TRUE) :
Could not resolve host: github.com; Host not found, try again
Run Code Online (Sandbox Code Playgroud)
显示此错误是因为R尝试通过代理在Intenet上访问.
我需要测试一些与客户端的HTTP交互,而不是修改.我需要测试的是当客户端的请求包含某个静态头时服务器的行为.
我认为运行此测试的最简单方法是设置一个HTTP代理,在每个请求上插入标头.设置它的最简单方法是什么?
我遇到Visual Studio 2013和我们的公司代理问题(登录不起作用,更新不起作用,Visual Studio库不起作用,nuget和git失败).所有这些都在做http或https请求.(例如http://visualstudiogallery.msdn.microsoft.com/).在VS2013中,我只是获得了旋转进度条或没有网络连接的消息.
浏览器(chrome,IE,firefox)没问题,因为他们都理解代理(407拒绝,然后用凭据回复).
所以我想弄明白为什么VS2013不起作用.但是当我告诉fiddler2观看DEVENV.EXE进程(或所有进程)时,我看不到任何流量.
顺便说一下,我已经尝试对web.config(devenv.exe.config)文件进行一些更改,以确保它转到代理(我在堆栈生成器中看到了这个),但它对我不起作用.请参阅以下部分的补充内容:
<system.net>
<defaultProxy useDefaultCredentials="true" enabled="true">
<proxy proxyaddress="http://gw6.OURSITE.com:3128" />
</defaultProxy>
<settings>
<ipv6 enabled="true"/>
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
埃里克,我接受了你的建议并把它塞进C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe.config文件中.
我放的是:
<system.net>
<defaultProxy useDefaultCredentials="true" enabled="true">
<proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
</defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)
我发现VS2013没有发送用户代理字符串.它确实知道#407 naks并且它使用凭据进行回复,但网关仍然需要用户代理:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: close
Connection: close
Content-Length: 1341
<html>
<head>
<title>Access Policy Denied: No User-Agent Specified</title>
<meta name="description" content="Web Access Policy">
</head>
<body>
Run Code Online (Sandbox Code Playgroud) 我很熟悉我应该将HTTP_RPOXY环境变量设置为代理地址.
一般urllib工作正常,问题是处理urllib2.
>>> urllib2.urlopen("http://www.google.com").read()
Run Code Online (Sandbox Code Playgroud)
回报
urllib2.URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>
Run Code Online (Sandbox Code Playgroud)
要么
urllib2.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
Run Code Online (Sandbox Code Playgroud)
我试过@Fenikso的答案,但我现在收到这个错误:
URLError: <urlopen error [Errno 10060] A connection attempt failed because the
connected party did not properly respond after a period of time, or established
connection failed because connected host has failed to respond>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我不知道我在这里做什么,所以如果你能帮助我,请记住这一点!
我试图通过代理连接到我的虚拟服务器,但我无法连接,它只是挂起.我假设这是因为它没有通过我们的代理.
我在家尝试过完全相同的东西,它完美无缺.我正在运行使用终端进行连接的OSX.
任何人都可以告诉我如何通过SSH获取代理?
我正在我的计算机上调试,通过在iPad中添加IP作为代理.我只需要看到来自iPad而不是电脑的流量.
"概述"部分的"客户端地址"字段中提到了iPad的IP.我如何看到来自该IP的请求?
这是代码:
HttpClient client = null;
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
Proxy = new WebProxy(string.Format("{0}:{1}", proxyServerSettings.Address,
proxyServerSettings.Port),false),
PreAuthenticate = true,
UseDefaultCredentials = false,
};
this.httpClientHandler.Credentials = new NetworkCredential(proxyServerSettings.UserName,
proxyServerSettings.Password);
this.client = new HttpClient(this.httpClientHandler);
Run Code Online (Sandbox Code Playgroud)
当我最终这样做时:
HttpResponseMessage httpResponseMessage = this.client.PostAsync(urlToPost, new StringContent(data, Encoding.UTF8, this.mediaType)).Result;
Run Code Online (Sandbox Code Playgroud)
它总是抛出
远程服务器返回错误:(407)需要代理身份验证.
对于我这个世界,我不明白.
在IE10中配置或者我使用HttpWebRequest该类时,相同的代理设置工作正常
我正在使用Charles Proxy来查看我的iphone发出的所有流量.我在我的iphone上安装了ssl证书/配置文件,我可以看到很多ssl加密的流量.但是,某些应用程序似乎没有完成ssl握手.
错误是:"SSLHandshake:握手期间远程主机关闭连接",然后Charles Proxy建议配置应用程序以信任Charles Root证书.当我将配置文件安装到我的iphone上时,我以为我做了什么?
有什么解释这个/解决方法吗?