1

我正在创建一个程序来使用 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更改为stringHttpResponseHttp.Request

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

使用代理支持扩展 Http 模块的最佳方法是什么?

4

3 回答 3

2

在新版本(即将发布的版本)中,我们将当前Http.RequesttoHttp.RequestString和当前Http.RequestDetailedto重命名Http.Request。这是一个突破性的变化,但我们认为它更有意义(并且更适合标准 .NET 命名)。如果您只是想复制旧文件,您可以随时从 GitHub 上的相应分支获取旧版本的代码(例如Http.fs @tag v1.1.10)。

但是,我认为支持 HTTP 代理将是对库的一个很好的补充。因此,最好的办法是将项目分叉到您的 GitHub,添加功能并提交拉取请求!我认为仅向?proxy这两种方法添加一个可选参数并将信息传播到底层HttpWebRequest将是最好的方法。

唯一棘手的是它Http.Request应该适用于多个版本的 .NET(包括 Windows Phone、Silverlight 等),因此您可能需要检查它们中的哪些实际上支持指定代理。

如果您没有时间帮忙,请提交GitHub 问题

于 2013-09-23T16:09:29.833 回答
2

在 FSharp.Data 2.0 中,您可以传递customizeHttpRequesttype的参数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))
于 2014-03-13T00:31:04.160 回答
0

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

于 2014-02-04T18:20:00.103 回答