【问题标题】:Enabling Web Requests go via reverse proxy in F#在 F# 中启用 Web 请求通过反向代理进行
【发布时间】:2018-08-24 11:57:30
【问题描述】:

代码在 F# 中,但也标记 C# 以防有任何建议。这是一个基于 SSL 的请求,它无法解析代理名称,除了 127.0.0.1 之外,我已经尝试了 http://localhosthttps://localhost

代码:

let request = WebRequest.Create("https://foo.example.com") :?> HttpWebRequest

let myproxy = WebProxy("http://127.0.0.1", 60103);
myproxy.BypassProxyOnLocal <- false;
request.Proxy <- myproxy;

错误:

System.Net.WebException:发送请求时出错。无法解析代理名称 ---> System.Net.Http.HttpRequestException:发送请求时出错。 ---> System.Net.Http.CurlException: 无法解析代理名称

我的配置

Reverse Proxy Settings
Local port: 60103
Remote Hot: foo.example.com
Remote Port: 443

(“启用反向代理”和上述记录本身都启用了复选框)

SSL 代理设置

Host: foo.example.com
Port: 443

选中“启用 SSL 代理”和记录本身的两个复选框。

在帮助 -> 代理 -> 安装查尔斯根证书下,证书已安装并在钥匙串中标记为受信任

【问题讨论】:

  • 看看WebProxy documentation。第一个参数是主机名,而不是 URL。
  • 所以你的意思是没有http?
  • 当我只使用 localhost 或 127.0.0.1` 时,请求超时,我确实在 Charles 代理中看到了一个传出请求,但最终它失败了。

标签: c# proxy f# charles-proxy


【解决方案1】:

这很痛苦,我意识到了错误,这是解决方案的答案。

问题的原因是一个在 nodejs 中对我有用的解决方案,它在这里引起了混乱,而没有意识到 C#/F# 为此提供了一个 WebProxy 类。 nodejs 没有 WebProxy 类(据我所知),因此概念是在 nodejs 中使用反向代理,即将请求发送到 localhost 和映射到远程 url 的特定端口。

因此,请保持您的 URL 与应指向的位置相同,并在此处使用 WebProxy 类指向 Charles Proxy 正在侦听和拦截请求的本地主机和端口(在我的情况下为 8888)。

感谢 Fyodor Soikin 指出不要使用 url(http:// 等)而只使用主机名。

// let url = "http://localhost:60103"; // don't do this, reverse proxy settings
let url = "https://example.com"; // keep the url intact

let request = WebRequest.Create(url) :?> HttpWebRequest

let myproxy = WebProxy("localhost", 8888); // port where Charles proxy is running
myproxy.BypassProxyOnLocal <- false;
request.Proxy <- myproxy;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 2019-07-21
    • 1970-01-01
    • 2016-01-02
    • 2011-09-03
    • 2015-11-18
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多