RestSharp 108.0.1如何配置WebProxy?请求返回407错误如何解决
RestSharp 108.0.1 配置WebProxy返回407的解决方法
问题原因
RestSharp 108.0.1版本底层重构为基于HttpClient封装,你当前的写法存在两个核心问题:
- 给初始化完成后的
client.Options.Proxy直接赋值,不会触发底层HttpClient的配置更新 - 该版本不会自动读取
WebProxy对象上设置的UseDefaultCredentials属性,代理凭据不会被透传到认证流程,最终触发407代理认证失败状态码
正确配置方式
方式1:通过RestClientOptions直接配置(写法最简便)
不要仅在WebProxy对象上设置默认凭据,初始化客户端时就在RestClientOptions中显式指定ProxyCredentials属性:
var options = new RestClientOptions("https://www.google.com") { Proxy = new WebProxy("http://mycorpproxy.com"), // 显式指定代理使用当前系统的默认登录凭据 ProxyCredentials = CredentialCache.DefaultCredentials }; var client = new RestClient(options); var request = new RestRequest(Method.Get); var response = client.Execute(request);
方式2:自定义HttpClientHandler配置(兼容性最好)
如果需要做更细粒度的HTTP参数调整,可以自行初始化HttpClientHandler完成代理配置,再透传给RestClient,这种方式可以规避所有版本的配置透传bug:
// 初始化代理对象 var proxy = new WebProxy("http://mycorpproxy.com") { UseDefaultCredentials = true }; // 配置底层HTTP消息处理器 var httpClientHandler = new HttpClientHandler { UseProxy = true, Proxy = proxy, // 显式开启代理默认凭据传递 DefaultProxyCredentials = CredentialCache.DefaultCredentials }; var client = new RestClient(new RestClientOptions("https://www.google.com") { ConfigureMessageHandler = _ => httpClientHandler }); var request = new RestRequest(Method.Get); var response = client.Execute(request);
注意事项
- 如果代理需要手动指定账号密码而非使用系统默认凭据,把示例里的
CredentialCache.DefaultCredentials替换为new NetworkCredential("代理用户名", "代理密码", "所属域(如有)")即可。 - 不要在RestClient初始化完成后再修改
Options.Proxy或者Options.ProxyCredentials属性,108.x版本的底层HttpClient在客户端初始化时就已创建完成,后续修改Options配置不会生效。
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

