使用HttpWebRequest来POST数据,服务器没有响应?

majiaking 2008-01-28 01:18:54
大家好!我用HttpWebRequest来POST用户名,密码等信息后,从服务器传回的数据和我没有POST时得到的网页数据一样.可是我在浏览器上填写完这些信息后点登陆按钮后就可以成功跳转到个人信息页面,可是用程序实现的时候却没有跳转,即使我输入的验证码或密码不正确,在浏览器上点登陆页面内容也会改变啊(虽然页面地址没变).不知道原因是什么.代码如下:
//向网页提交数据并接收返回信息:
private string httpPost(string URI, string Parameters)
{
ASCIIEncoding encoding=new ASCIIEncoding();
byte[] bytes = encoding.GetBytes(Parameters);

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URI);

req.ContentLength = bytes.Length;
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
string sReturn = "";
try
{
req.ContentLength = bytes.Length;
Stream os = req.GetRequestStream();

os.Write(bytes, 0, bytes.Length);
os.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
if (resp == null) return null;
StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("gb2312"));
sReturn = sr.ReadToEnd().Trim();
resp.Close(); sr.Close();
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
return sReturn;
}
...全文
1369 10 打赏 收藏 转发到动态 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuxue110 2010-12-23
  • 打赏
  • 举报
回复
我也很想知知道
majiaking 2008-01-28
  • 打赏
  • 举报
回复
To blestcc :
感谢你的回复,我加过req.Referer="http://haoma.qq.com/login.php";还是没响应;

To netfeel2008:
感谢你的帮助,但是你给的代码也没有得到想要的结果.跟我顶楼的代码似乎是差不多的 呵呵
netfeel2008 2008-01-28
  • 打赏
  • 举报
回复
帮您找了找 不知道这个是否对您有所帮助?
using System.Web;
using System.Net;
using System.Text;
using System.IO;

//创建对某个网站页面的请求

HttpWebRequest myRequest = (HttpWebRequest )WebRequest.Create("http://www.knowsky.com/a.ASP")

//上传的数据,”TextBox1“这些东东是网站页面里的控件ID,如果要上传多个值也是用&来分隔

string postData="TextBox1="+this.textBox1.Text+"&TextBox2="+this.textBox2.Text+"
&TextBox3="+this.textBox3.Text+"&TextBox4="+this.textBox4.Text;
ASCIIEncoding encoding=new ASCIIEncoding();
byte[] byte1=encoding.GetBytes(postData);//最终编码后要上传的数据
// Set the content type of the data being posted.
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.Method="post";//post上传方式
// Set the content length of the string being posted.
myRequest.ContentLength=postData.Length;
Stream newStream=myRequest.GetRequestStream();
newStream.Write(byte1,0,byte1.Length);


一切就OK了,如果你想上传后看到网站的内容的话,可以在程序里放一个IE控件,使用

axWebBrowser1.Navigate("http://www.knowsky.com/a.asp");
axWebBrowser1.Refresh2();
blestcc 2008-01-28
  • 打赏
  • 举报
回复
加上req.Referer="http://haoma.qq.com/login.php";试试,把你用程序post的包也抓下来看看
wisecameo 2008-01-28
  • 打赏
  • 举报
回复
嗯,在多加个控件pbLogin(PictureBox)
void LoadPic()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ptlogin2.qq.com/getimage?aid=8000202&0.22125634725106152 "); //请求图片
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
Image image = Image.FromStream(stream);
pbLogin.Image = image;
response.Close();
}

load的时候加载上这个方法,配合你上面的方法,就可以做出来了。还有啥不明白的加QQ535615299
majiaking 2008-01-28
  • 打赏
  • 举报
回复
以下是我在未填写所有输入框点登陆后用ieHTTPHeaders获取的HTTP头信息:
POST /login HTTP/1.1
Accept: */*
Referer: http://haoma.qq.com/login.php
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: ptlogin2.qq.com
Content-Length: 105
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: pvid=7984477053; flv=9.0; icache=BEM@CMGC; adid=123456; edition=4m95.mail.qq.com; airkey=eab28ef614dbd3679e200ea0be7b905c6b5427f3c59856f998795601f4cf31e7; verifysession=550593897d32b9543e34f2c80a2bbbb8ed29fab55e5654852f894b307af85867ddaf68f8845c9608; ssid=s1557503446

u=&p=1C9358BB74DF0D9D4AA6933819017E32&verifycode=&h=1&aid=8000202&u1=http%3A%2F%2Fhaoma.qq.com%2Finfo.php

我要测试的页面是:http://haoma.qq.com/login.php
下面是我调用顶楼定义的函数的过程:
string temp = httpPost( "http://haoma.qq.com/login.php",			         "u=&p=1C9358BB74DF0D9D4AA6933819017E32&verifycode=&h=1&aid=8000202&u1=http%3A%2F%2Fhaoma.qq.com%2Finfo.php&Submit=Submit");

输出temp后发现和没POST时获取的网页内容一样,也就是说,页面根本没有跳转到"您输入的帐号不正确,请重试。"这个页面.
恳请大家帮忙....

wisecameo 2008-01-28
  • 打赏
  • 举报
回复
一句话帮您解决了吧
这个网站专门采用了认证服务器,地址是"http://ptlogin2.qq.com/login".所以你要提交的地址应该是URL = "http://ptlogin2.qq.com/login",而不是开始的http://haoma.qq.com/login.php
blestcc 2008-01-28
  • 打赏
  • 举报
回复
抓包下来比较一下(网页post的包和程序post的包),另外对方服务器是不是有做了其它检查,比如来路之类
feiyun0112 2008-01-28
  • 打赏
  • 举报
回复
首先看看你的URI对不对

你最好用sniffer软件察看一下浏览器到底如何发送的数据

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
majiaking 2008-01-28
  • 打赏
  • 举报
回复
问题还未解决 顶上去先!!!

谁能成功用程序登陆上http://haoma.qq.com/login.php 验证码可手工输入,立刻给分!!!

109,355

社区成员

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

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