2013-09-23 110 views
0

我正在创建一个程序来使用FSharp.Data的Http模块下载网页。但是,该模块不支持设置http代理服务器。在C#中有FSharp.Data和代理服务器的Http

_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#项目中使用它。但是,从我下载的文件中调用Http.Request之后,response的类型从string更改为HttpResponse

let response = 
    Http.Request (
     url, 
     query=["userid", user; "password", password; "login", "Sign+On"], 
     meth="POST", 
     cookieContainer = cc) 

通过代理支持来扩展Http模块的最佳方式是什么?

回答

2

在FSharp.Data 2.0,你可以通过HttpWebRequest->HttpWebRequest类型的参数customizeHttpRequest设置代理这样的:

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

在新版本(即将发布)中,我们将当前的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

+0

感谢。另一个缺失的功能可能是下载大文件的功能。现在它使用所有'ReadToEnd'进行下载?我对F#很陌生。当我更熟悉F#时,我会分解这个项目。 – ca9163d9

0

您是否试过用WebRequest.DefaultWebProxy = new System.Net.WebProxy("http://proxy.myCompany.com:80", true)覆盖全局代理?

相关问题