当前位置:编程学习 > C#/ASP.NET >>

HTTP POST问题

用以下代码:
    Function HttpPOST(ByVal Url As String, ByVal PostData As String, Optional ByVal Time As Integer = 0) As Stream
        Dim req As HttpWebRequest
        If Time <> 0 Then
        End If
        req = WebRequest.Create(Url)
        req.Method = "POST"
        Dim bytesData() As Byte = System.Text.Encoding.ASCII.GetBytes(PostData)
        req.ContentLength = bytesData.Length
        Dim postStream As Stream = req.GetRequestStream()
        postStream.Write(bytesData, 0, bytesData.Length)
        Dim res As HttpWebResponse = req.GetResponse()
        Return res.GetResponseStream
    End Function
将返回流转换为文本之后,发现怎么都是失败的,POST文本没有问题,因为在其他编程语言里面都能成功.
应该怎么改? 
提供一组测试数据:
地址:http://www.5d6d.com/logging.php?action=login&referer=bbscp.php
POST数据:username=用户名&password=密码&submit=+&formhash=36a2650c&loginfield=username&loginsubmit=true --------------------编程问答-------------------- 这个论坛居然没有验证码,嘿嘿。

你不提供用户名密码不好测啊,懒得去注册了。 --------------------编程问答-------------------- 乱输入都没有错误提示的,不信试试看. --------------------编程问答--------------------
你把提交地址改成:

http://www.5d6d.com/logging.php?action=login&loginsubmit=yes&inajax=1 --------------------编程问答--------------------
<?xml version="1.0" encoding="gbk"?><root><![CDATA[登录失败,您还可以尝试 3 次<script type="text/javascript" reload="1">
function ajaxerror() {
alert('登录失败,您还可以尝试 3 次');
}

ajaxerror();

</script>]]></root>
--------------------编程问答-------------------- 要是其他网站呢?怎么改?有规律吗? --------------------编程问答-------------------- 要学会有嗅探工具,比如我用的SmartSniff。 --------------------编程问答-------------------- 问题是其他编程语言怎么能行? --------------------编程问答-------------------- 这个跟语言没关系,关键在向服务器提交的数据,你用嗅探工具分别抓一下数据看看。 --------------------编程问答-------------------- 向同一地址POST同样的内容,用API方式就行,换成类库就不行了. --------------------编程问答-------------------- 提交的东西不全吧,httpreffer这些东西好像没有,浏览器信息也没有 --------------------编程问答-------------------- 向同一地址POST同样的内容,用API方式就行,换成类库就不行了.
用类库应该怎么写? --------------------编程问答-------------------- 慢慢琢磨吧,做这方面工作最基本的还要伪造Referer和UserAgent,记录和传递Cookie。 --------------------编程问答-------------------- http://social.microsoft.com/Forums/zh-CN/vbasiczhchs/thread/c17494dc-cb93-43a4-8293-3e7b93145fd0
像这种情况又怎么办? --------------------编程问答-------------------- 我都懒得给你试了,我说的嗅探工具你有没有用?看看正常网页登录和你程序模拟登录发送的数据有什么区别,你自然就明白了。

还有很多工作要做的,基本上除了上面说的还有比如POST提交的数据xxx=后面的值中的中文和一些特殊符号要根据gb2312或utf-8等格式编码的。 --------------------编程问答-------------------- 说了POST文本没错.因为在其他编程语言中向同一个网址POST同样的内容能成功,换成.net就不行了. --------------------编程问答-------------------- 你还真是固执,有点懒惰的固执,我说的方法你去试了么?

不要以为POST文本相同,效果就应该相同。
有种东西叫做HTTP头,不同语言默认情况下发送的头信息不一定是相同的,你缺了个头信息或是某个头信息不符,你就应该添加或是修改这个头信息!

上面说的Referer、UserAgent、Cookie都是头信息之一。 --------------------编程问答-------------------- 这么说,用其他编程语言是调用API实现的,.net是用类库实现的,向同一个网址POST同样的内容就用API能成功,用.net类库就不行了,为什么? --------------------编程问答-------------------- 唉,坚持到底吧,POST前面发的页面,这是你的程序的HTTP头:

POST /logging.php?action=login&loginsubmit=yes&inajax=1 HTTP/1.1
Host: www.5d6d.com
Content-Length: 88
Expect: 100-continue
Connection: Keep-Alive

这是浏览器提交的HTTP头:

POST /logging.php?action=login&loginsubmit=yes&inajax=1 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://www.5d6d.com/logging.php?action=login&referer=bbscp.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.2;  Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MAXTHON 2.0)
Host: www.5d6d.com
Content-Length: 98
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: cdb_sid=hWKGFg; __utmc=25581497; __utma=25581497.2051854760.1254800236.1254801694.1254816894.3; __utmz=25581497.1254800236.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=25581497.1.10.1254816894

至于你说的其他编程语言调用API实现,你也可以抓取看看。。。。。。 --------------------编程问答-------------------- 你可以试试utf8编码 --------------------编程问答-------------------- 我用HttpAnalyzer查过两种语言的POST内容,发现.net少了几个标头,加上去后还是不行,有没有通用的POST代码,即不同内容可以用参数去修改,那样的代码应该怎么写? --------------------编程问答-------------------- 编码..把发送的数据 编码一下.
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,