webrequest的异步方法里不能再执行另一个POST方法吗?那如何再进行get或post操作呢?(最佳正确答案送50元移动卡密) 本帖最后由 yzmsb 于 2009-10-22 05:01:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 软件实现的功能是: 先得到cookie然后再登陆网站并获取想要的数码。因为同步的效率不怎么样,所以我想用异步的。cookie得到了,可套用同步的post代码行不通。求解 this.godl("pcusertest","52653652",icookie); public void godl(string u,string p, string scookie, string icookie)参数好像有出入HttpWebRequest request = (HttpWebRequest)WebRequest.Create (http://www.microsoft.com );HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream() );string str = reader.ReadToEnd();reader.Close();response.Close(); Stream resStream = wrp.GetResponseStream(); //总是在这里卡住StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);改成StreamReader sr = new StreamReader(wrp.GetResponseStream()); 如果是WINFORM,用多线程以同步方式处理,并封装成对象,返回时以事件返回,这样效率应该不错的,给你看一下我的代码,是一个数据采集的:/// <summary> /// 下载数据 /// </summary> /// <param name="url"></param> void Download(Uri url) { WebResponse response = null; Stream stream = null; StreamReader reader = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.AllowAutoRedirect = true; request.MaximumAutomaticRedirections = 3; request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1)"; request.KeepAlive = true; request.Timeout = m_manager.getTaskConfig.Timeout; response = request.GetResponse(); stream = response.GetResponseStream(); //如果下载的是二进制 if (!response.ContentType.ToLower().StartsWith("text/")) { SaveBinaryFile(response); return; } //如果下载的是文本格式就分析 //首先要读取文本 string buffer = "", line; reader = new StreamReader(stream, m_manager.getTaskConfig.Encode); while ((line = reader.ReadLine()) != null) { buffer += line + "\r\n"; } if (buffer.Length <= BUFFER_MIN_SIZE) { Log.Info(string.Format("下载\"{0}\"失败,文件大小于3KB,下载终止,重新拨号", url)); m_manager.OnTaskBreak(m_currentUrl); } else { Log.Info("下载成功:" + url.ToString()); //处理下载的页面 ProcessPage(buffer); } } catch (WebException e) { Log.Warn("下载错误:" + url.ToString() + "|" + e.ToString()); //Console.WriteLine("下载失败,错误:" + e); return; } catch (IOException e) { Log.Warn("下载错误:" + url.ToString() + "|" + e.ToString()); //Console.WriteLine("下载失败,错误:" + e); return; } finally { if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (response != null) response.Close(); } } 我怀疑你的用户名、密码或COOKIE取得有问题,你测试下,直接用godl方法,参数写死看看。 回复 三楼和五楼的网友,谢谢你们的回帖。直接加参数在botton里调用godl是正常的,返回内容也正常。获取cookie和用户名密码也正常的。public void godl(string u,string p, string scookie, string icookie) 参数好像有出入 这个sookie是我发帖时改动过的。不存在的。 Stream stream = httpWebRequest.GetRequestStream(); 是这行卡住。这行前面的msg显示.后面的msg没显示。所以是这行卡住。昨没太困了搞错。对不起! 你好。当事件处理可能就是实现我要的目的的最佳方式,不过C#事件这块我完全不懂呢。异步request也是才开始学的。你的代码我看半天都理解不了是什么意思。真是郁闷。不过谢谢你代码! 也没功夫看了,我最近遇到的问题是因为.net2.0限制了httpWebRequest的并发访问最大数,在你的访问类中加入ServicePointManager.DefaultConnectionLimit = 100; 不然.net2.0默认为并发数为2个,稍微看了下你的解释,我想八成是这个问题具体并发数自己设置就好了,建议不要操作线程池的数量。。 不是的呀。并发数我设了999呢。不过也同这个有点像。我的是在异步方法里再执行一个httprequest方法。 C# 将本地图片保存到mysql数据库,求解决思路! 请高手大大帮帮忙 ▆▆▆▆▆▆▆高分求empp的c#源码 empp2的不要,只要empp的(200分) 求 ASP.NET XML高级编程—C#编程篇 的源码 UP有分++++++ WINFORM可以做到页框功能吗? 团队怎么开发管理系统呢?我们3个人, 想得到这样一个整数,请问怎样赋值? 在用C#转化.txt文档.PDF文件时,里面的中文信息变成了乱码? 300分求vs.net英文企业架构版的高速下载网址 c# listview 使用reportview导出文件的问题
public void godl(string u,string p, string scookie, string icookie)
参数好像有出入HttpWebRequest request = (HttpWebRequest)WebRequest.Create (http://www.microsoft.com );
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream() );
string str = reader.ReadToEnd();
reader.Close();
response.Close(); Stream resStream = wrp.GetResponseStream(); //总是在这里卡住
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
改成
StreamReader sr = new StreamReader(wrp.GetResponseStream());
/// <summary>
/// 下载数据
/// </summary>
/// <param name="url"></param>
void Download(Uri url)
{
WebResponse response = null;
Stream stream = null;
StreamReader reader = null; try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = true;
request.MaximumAutomaticRedirections = 3;
request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1)";
request.KeepAlive = true;
request.Timeout = m_manager.getTaskConfig.Timeout;
response = request.GetResponse();
stream = response.GetResponseStream(); //如果下载的是二进制 if (!response.ContentType.ToLower().StartsWith("text/"))
{
SaveBinaryFile(response);
return;
}
//如果下载的是文本格式就分析 //首先要读取文本 string buffer = "", line;
reader = new StreamReader(stream, m_manager.getTaskConfig.Encode);
while ((line = reader.ReadLine()) != null)
{
buffer += line + "\r\n";
} if (buffer.Length <= BUFFER_MIN_SIZE)
{
Log.Info(string.Format("下载\"{0}\"失败,文件大小于3KB,下载终止,重新拨号", url));
m_manager.OnTaskBreak(m_currentUrl);
}
else
{
Log.Info("下载成功:" + url.ToString());
//处理下载的页面 ProcessPage(buffer);
}
}
catch (WebException e)
{
Log.Warn("下载错误:" + url.ToString() + "|" + e.ToString());
//Console.WriteLine("下载失败,错误:" + e);
return;
}
catch (IOException e)
{
Log.Warn("下载错误:" + url.ToString() + "|" + e.ToString());
//Console.WriteLine("下载失败,错误:" + e);
return;
}
finally
{
if (reader != null) reader.Close();
if (stream != null) stream.Close();
if (response != null) response.Close();
}
}
回复 三楼和五楼的网友,谢谢你们的回帖。直接加参数在botton里调用godl是正常的,返回内容也正常。获取cookie和用户名密码也正常的。public void godl(string u,string p, string scookie, string icookie)
参数好像有出入
这个sookie是我发帖时改动过的。不存在的。
Stream stream = httpWebRequest.GetRequestStream(); 是这行卡住。这行前面的msg显示.后面的msg没显示。所以是这行卡住。昨没太困了搞错。对不起!
你好。当事件处理可能就是实现我要的目的的最佳方式,不过C#事件这块我完全不懂呢。异步request也是才开始学的。你的代码我看半天都理解不了是什么意思。真是郁闷。不过谢谢你代码!
在你的访问类中加入
ServicePointManager.DefaultConnectionLimit = 100;
不然.net2.0默认为并发数为2个,
稍微看了下你的解释,我想八成是这个问题
具体并发数自己设置就好了,建议不要操作线程池的数量。。
不是的呀。并发数我设了999呢。不过也同这个有点像。我的是在异步方法里再执行一个httprequest方法。