C# 中HttpWebRequest 获取网页信息阻塞问题,只能提交一次

lafkkk2 2010-07-14 04:50:37

按钮事件:

private void button_start_Click(object sender, EventArgs e)
{

if (textBox_url.Text.Replace("http://", "") != "")
{
domain = textBox_url.Text.Replace("http://", "").Replace("www.", "");
String htmlcode =dopost("论文" + " site:" + domain);
MessageBox.Show(htmlcode);
}
else
{
MessageBox.Show("The Target is Null,Fuck you!");
}

}



提交方法:

public String dopost(String keyword)
{
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param = HttpUtility.UrlEncode("hl", myEncoding) + "=" + HttpUtility.UrlEncode("zh-CN", myEncoding) + "&"
+ HttpUtility.UrlEncode("num", myEncoding) + "=" + HttpUtility.UrlEncode("100", myEncoding) + "&"
+ HttpUtility.UrlEncode("q", myEncoding) + "=" + HttpUtility.UrlEncode(keyword, myEncoding);
byte[] postBytes = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com.hk/search?"+param);
req.Method = "GET";
req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength = postBytes.Length;



WebResponse wr = null;
try
{
wr = req.GetResponse();
}
catch
{
label_status.Text = "网络连接错误,没插网线吧!";
}

using (wr)
{
StreamReader sr = new StreamReader(wr.GetResponseStream());
return sr.ReadToEnd();
}
}



代码都在这里了,编译之后,第一次执行都没有问题,但是只能执行一次;要重新提交请求的话必须要把 程序关了再重新打开,极度郁闷啊


分不少了吧,要是嫌少,我可以再加,分不是问题,问题是怎么感觉这C#这么奇怪啊!

...全文
357 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovezhizi 2010-07-15
  • 打赏
  • 举报
回复
晕菜了 server2003
lovezhizi 2010-07-15
  • 打赏
  • 举报
回复
摘自我以前写的一个类 vs2005 sql2003下没问题
lovezhizi 2010-07-15
  • 打赏
  • 举报
回复

HttpWebRequest MyRequest = null;
HttpWebResponse MyResponse = null;
try
{
if (url.IndexOf("www.tudou.com/programs/view/") > 0)
{
return checkSame(url);
}
else
{

MyRequest = (HttpWebRequest)HttpWebRequest.Create(url);
MyRequest.Timeout = 15000;
MyRequest.AllowAutoRedirect = false;
MyResponse = (HttpWebResponse)MyRequest.GetResponse();

if (MyResponse.StatusCode == HttpStatusCode.OK)
{
Stream resStream = MyResponse.GetResponseStream();
StreamReader webRstrem = new StreamReader(resStream, Encoding.Default);
StringBuilder sb = new StringBuilder();
string Result = "";
while ((Result = webRstrem.ReadLine()) != null)
{
sb.Append(Result);
if (Result.IndexOf("</title>") > 0)
{
break;
}
}
string haha = sb.ToString();

webRstrem.Close();
resStream.Close();
MyResponse.Close();
MyRequest.Abort();

string regex = @"(?<=<title.*>)([\s\S]*)(?=</title>)";
System.Text.RegularExpressions.Regex ex = new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
string rile = ex.Match(haha).Value.Trim();
if (rile == "网页无法找到")
{
return false;
}
else
{
return true;
}
}
else
{
MyResponse.Close();
MyRequest.Abort();
return false;
}
}
}
catch (Exception e)
{
if (MyResponse != null)
{
MyResponse.Close();
}
if (MyRequest != null)
{
MyRequest.Abort();
}
if (e.Message.ToString() == "操作超时")
{
time++;
if (time >= 3)
{
return false;
}
System.Threading.Thread.Sleep(500);
return checkTudou(url);
}
}
lafkkk2 2010-07-14
  • 打赏
  • 举报
回复
估计 大侠 懒得回答我的问题 了!! 求救啊求救
lafkkk2 2010-07-14
  • 打赏
  • 举报
回复
我是 直接 get方式的 ,非要采用post 方式?
请明示
wuyq11 2010-07-14
  • 打赏
  • 举报
回复
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
using (Stream reqStream = req.GetRequestStream())
{

}
using (WebResponse wr = req.GetResponse())
{}

lafkkk2 2010-07-14
  • 打赏
  • 举报
回复
来高手吧 ,我顶一顶~ 网上的方法都试过了 ,我还没用多线程呢 要多线程 拿起不上什么都提交不了 啊
lafkkk2 2010-07-14
  • 打赏
  • 举报
回复
修改之后的代码”:

public String dopost(String keyword)
{
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param = HttpUtility.UrlEncode("hl", myEncoding) + "=" + HttpUtility.UrlEncode("zh-CN", myEncoding) + "&"
+ HttpUtility.UrlEncode("num", myEncoding) + "=" + HttpUtility.UrlEncode("100", myEncoding) + "&"
+ HttpUtility.UrlEncode("q", myEncoding) + "=" + HttpUtility.UrlEncode(keyword, myEncoding);
byte[] postBytes = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com.hk/search?"+param);
req.Method = "GET";
req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength = postBytes.Length;



WebResponse wr = null;
try
{
wr = req.GetResponse();
}
catch
{
label_status.Text = "网络连接错误,没插网线吧!";
}

using (wr)
{
StreamReader sr = new StreamReader(wr.GetResponseStream(),Encoding.GetEncoding("gb2312"));
String str=sr.ReadToEnd();
req.Abort();
wr.Close();
return str;
}
}


依然不行 ,提示是wr为空
lovezhizi 2010-07-14
  • 打赏
  • 举报
回复
另外补充一下 如果你要提取大量网页在catch里也要释放一下
lovezhizi 2010-07-14
  • 打赏
  • 举报
回复
没有释放
req.Abort();
wr.close();

我以前遇到过

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧