使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消...

使用线程池并发处理request请求及错误重试,使用委托处理UI界面输出。

 http://www.cnblogs.com/Charltsing/p/httpwebrequest.html

                 for (int j = 0; j < _userlist.Count; j++)
                    {
                        user = _userlist[j];
                        if (user.Length == 0) continue;

                        for (int k = 0; k < _passwordlist.Count; k++)
                        {
                            password = _passwordlist[k];
                            if (password.Length == 0) continue;

                            if (threadscount < _MaxThreadsCount)
                            {                                
                                if (_isStop) 
                                {
                                    WriteMessage("\r\n停止创建新线程,正在结束已运行的线程,请等待...\r\n");
                                    goto StopHttp;
                                }
                                HttpWebRequestParameters param = new HttpWebRequestParameters(url, user, password,0,false);
                                ThreadPool.QueueUserWorkItem(new WaitCallback(MakeWebRequest), param);
                                Interlocked.Increment(ref threadscount);
                                Interlocked.Increment(ref requestcount);
                            }
                            else
                            {
                                k--;
                            }
                            WriteStatus("已使用线程数:" + threadscount.ToString() +
                                        " 已发送请求数:" + requestcount.ToString() +
                                        " 已完成请求数:" + responsecount.ToString());
                        }
                        System.GC.Collect();
                    }

  

***************************************

更新说明:

上面的方法使用线程池,这种方法没有task方便。

我在2016年11月用async/await+httpclient 重新写了一个版本,实现了完整的任务发布、异步提交http请求、超时或者手工取消的操作

 

此外,还写了一个使用async+HttpWebRequest+task实现的异步提交任务及超时处理的代码版本,这种方法不需要自己实现多线程,异步操作本身就是通过线程池来实现多线程的。

 

 

 

联系QQ:564955427

欢迎交流!

转载于:https://www.cnblogs.com/Charltsing/p/httpwebrequest.html

HttpClientHttpWebRequestC#中常用的两种用于进行HTTP通信的类,它们都可以用于发送HTTP请求和接收HTTP响应,但在使用上有一些区别。 HttpClient是在.NET Framework 4.5及以上版本引入的,而HttpWebRequest则是较早的.NET Framework版本中就有的。 HttpClient是基于Task的异步模型进行设计的,它提供了一种更简洁、更易用的方式来发送HTTP请求和接收HTTP响应。使用HttpClient,可以通过调用其GetAsync、PostAsync等方法来发送HTTP请求,并通过异步方式获取响应结果。 示例代码如下: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main() { using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync("http://example.com"); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } } } ``` HttpWebRequest则是使用较早的同步模型进行设计的,它提供了更多的灵活性和细粒度的控制。使用HttpWebRequest,可以通过设置请求头、请求方法、请求体等属性来发送HTTP请求,并通过同步方式获取响应结果。 示例代码如下: ```csharp using System;using System.IO; using System.Net; class Program { static void Main() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com"); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseBody = reader.ReadToEnd(); Console.WriteLine(responseBody); } } } ``` 总的来说,HttpClient更加现代化和易用,适用于大多数情况下的HTTP通信。而HttpWebRequest则提供了更多的底层控制能力,适用于一些特殊的需求。开发者可以根据具体的场景选择适合自己的类进行HTTP通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值