GetResponse() 获取页面内容不成功提示“ 远程服务器返回错误: (405) 不允许的方法。”

cjer 2007-12-13 09:03:26
用浏览器可以打开页面,但是程序中却获取不到,如果需要虚拟个http头,都该设置什么?

以下为源代码:

HttpWebRequest t_request;
t_request = (HttpWebRequest)WebRequest.Create(new Uri(p_PageUrl));
t_request.Method = "POST"; //Post请求方式

t_request.ContentType = "text/html;charset=gb2312"; //内容类型
t_request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; POTU(RR:27062616:0:5076910); .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; MAXTHON 2.0)";
t_request.Referer = p_PageUrl;
string paraUrlCoded = System.Web.HttpUtility.UrlEncode(p_postData); //参数经过URL编码
byte[] payload;
payload = System.Text.Encoding.GetEncoding("GB2312").GetBytes(paraUrlCoded); //将URL编码后的字符串转化为字节
t_request.ContentLength = payload.Length; //设置请求的ContentLength
Stream writer = t_request.GetRequestStream(); //获得请求流
writer.Write(payload, 0, payload.Length); //将请求参数写入流
writer.Close(); //关闭请求流

//发送请求并获取相应回应数据
HttpWebResponse t_response;
t_response = (HttpWebResponse)t_request.GetResponse(); //获得响应流
Stream s;
s = t_response.GetResponseStream();
BinaryReader br = new BinaryReader(s);
byte[] t_b = br.ReadBytes(2);
StreamReader t_objReader = new StreamReader(s, GetEncodingByByte(t_b));

//返回结果网页(html)代码
string t_content = t_objReader.ReadToEnd();
p_err = string.Empty;
return t_content;
...全文
2338 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingyelee 2010-03-23
  • 打赏
  • 举报
回复
我的还是不行啊。
ycagri 2007-12-17
  • 打赏
  • 举报
回复
我是来分分的,谢谢
cjer 2007-12-17
  • 打赏
  • 举报
回复
那些站点都是不需要提交这些东西的,只是一部分必须用Get方式获取而另一部分必须用post才允许读取,不知道连接上时怎么判断,于是先get,获取内容为空再用post
而post的参数根据flashget去下载时连接所用的的参数来设置

不过谢谢楼上各位,再来个,100分刚好能平分:D
cjer 2007-12-17
  • 打赏
  • 举报
回复
还真会挑时间 :D
cuike519 2007-12-14
  • 打赏
  • 举报
回复
如果使用的localhost改成127.0.0.1看看
jsjhycl 2007-12-14
  • 打赏
  • 举报
回复
加入:
request.ContentType="application/x-www-form-urlencoded";
Gulang68 2007-12-14
  • 打赏
  • 举报
回复
如果服务器端接收提交的内容是form的话,request.ContentType要设置为:application/x-www-form-urlencoded
否则服务器取不到参数。

cjer 2007-12-14
  • 打赏
  • 举报
回复
我所要读取的大部分站点只允许Get方式获取,不允许Post,将Method改为GET并去除请求流的写入即可,其他项由FlashGet去下载然后查看都需要哪些属性,值是什么

110,534

社区成员

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

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

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