FSharp.Data和代理服务器的Http

时间:2013-09-23 15:46:12

标签: f# f#-3.0 f#-data

我正在使用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模块的最佳方法是什么?

3 个答案:

答案 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)全局覆盖代理?