我正在使用FSharp.Data的Http模块创建一个下载网页的程序。但是,该模块不支持设置http代理服务器。在C#中有
_httpWebRequest.Proxy =
new System.Net.WebProxy("http://proxy.myCompany.com:80", true);
我尝试从https://github.com/fsharp/FSharp.Data/blob/master/src/Library/Http.fs下载文件并直接在我的F#项目中使用它。但是,在我从下载的文件中调用response
后,string
的类型从HttpResponse
更改为Http.Request
。
let response =
Http.Request (
url,
query=["userid", user; "password", password; "login", "Sign+On"],
meth="POST",
cookieContainer = cc)
使用代理支持扩展Http模块的最佳方法是什么?
答案 0 :(得分:2)
在新版本(即将发布的版本)中,我们将当前Http.Request
重命名为Http.RequestString
,将当前Http.RequestDetailed
重命名为Http.Request
。这是一个重大改变,但我们认为它更有意义(并且更适合标准的.NET命名)。如果您只想复制旧文件,可以随时从GitHub上的相应分支获取旧版本的代码(例如Http.fs @ tag v1.1.10)。
但是,我认为支持HTTP代理将是对库的一个很好的补充。因此,最好的办法是将项目分叉到GitHub,添加功能并提交拉取请求!我认为只是在两个方法中添加一个可选的?proxy
参数并将信息传播到基础HttpWebRequest
将是最好的方法。
唯一棘手的问题是Http.Request
应该适用于多个版本的.NET(包括Windows Phone,Silverlight等),因此您可能需要检查其中哪些实际上支持指定代理。
如果您没有时间帮忙,请提交a GitHub issue。
答案 1 :(得分:2)
在FSharp.Data 2.0中,您可以传递customizeHttpRequest
类型的参数HttpWebRequest->HttpWebRequest
来设置代理,如下所示:
Http.Request (
url,
query=["userid", user; "password", password; "login", "Sign+On"],
meth="POST",
cookieContainer = cc,
customizeHttpRequest = (fun req -> req.Proxy <- WebProxy("http://proxy.myCompany.com:80", true); req))
答案 2 :(得分:0)
您是否尝试使用WebRequest.DefaultWebProxy = new System.Net.WebProxy("http://proxy.myCompany.com:80", true)
全局覆盖代理?