WebRequest类,优化代码?

时间:2015-01-11 19:06:11

标签: c#

我创建的程序在不同的网站上每秒执行数百次点击。

HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("SecureControl / / reset / passwordreset");
request.Headers.Add ("Authorization", "Basic asdadsasdas8586"); 
request.ContentType = "application / x-www-form-urlencoded";
request.Host = "www.xxxxxxxxxx.com";
request.method = "POST";
request.Proxy = null;
request.Headers.Add ("& command = requestnewpassword");
request.Headers.Add ("& application = netconnect");

此代码处于数千次重复循环中,因此单独添加标题会占用CPU过多的内存。

这个想法是将它用作vb6中的winsock。 例如: Winsock1.Sendata AllHTTPHeaders 因此,只发送数据而不添加标题。

我想保存cpu资源,我的问题是,如果有任何方法不声明代码添加不必要的标头。 有一种方法可以存储一个变量的http头文件吗? 并发送更快的方式。

类似:HttpWebRequest request =(HttpWebRequest)ALLHEADERS。

有什么想法吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

分享WebHeaderCollection的此实例并将其分配给网络请求'标题属性:

private static readonly WebHeaderCollection Headers = new WebHeaderCollection()
{
    {"Foo", "bar"}
};

您还可以在发出任何请求之前将WebRequest.DefaultWebProxy设置为null,因此您不必为每个请求明确地执行此操作。

考虑:

private static readonly WebHeaderCollection Headers = new WebHeaderCollection()
    {
        {"Authorization", "Basic asdadsasdas8586"},
        {"command", "requestnewpassword"},
        {"application", "netconnect"}
    };

private static void Start(int nRequests)
{
    WebRequest.DefaultWebProxy = null;

    for (var i = 0; i < nRequests; ++i) {
        SendRequest();
    }
}

private static bool SendRequest()
{
    var request = HttpWebRequest.Create("URL");
    request.Headers = Headers;
    //Set other properties (like .Method) here

    using (var response = (HttpWebResponse)request.GetResponse()) {
        //Returns boolean indicating success
        return response.StatusCode == HttpStatusCode.OK;
    }
}