2013-09-23 108 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)覆蓋全局代理?

相關問題