none
HTTP POST问题 RRS feed

  • 问题

  • 用以下代码:
        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
    我是包子!
    2009年10月6日 3:59

答案

全部回复

  • 我的通用POST方法是这么些的
    Public Function MethodPOST(ByVal URL As String, ByVal Referer As String, ByVal POSTString As String)
            Dim PageString As String = ""
            Try
                Dim Buffer() As Byte = System.Text.Encoding.GetEncoding("gb2312").GetBytes(POSTString)
                Dim Request As HttpWebRequest = WebRequest.Create(URL)
                Request.ContentType = "application/x-www-form-urlencoded"
                Request.ContentLength = Buffer.Length
                Request.CookieContainer = Session
                Request.Referer = Referer
                Request.Method = "POST"
                Request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; Media Center PC 5.0)"
                Dim RequestStream As System.IO.Stream = Request.GetRequestStream()
                RequestStream.Write(Buffer, 0, Buffer.Length)
                RequestStream.Close()
                Dim Response As HttpWebResponse = Request.GetResponse()
                PageString = New IO.StreamReader(Response.GetResponseStream).ReadToEnd
                Response.Close()
            Catch ex As Exception
            End Try
            Return PageString
        End Function
    Seesion是定义的一个CookieContainer
    希望对你有帮助
    2009年10月6日 4:36
  • 你的代码对http://www.5d6d.com/logging.php?action=login&referer=bbscp.php 有效
    再提供一组数据:
    地址:http://www.phpwind.net/login.php
    POST:jumpurl=http%3A%2F%2Fwww.phpwind.net%2Findex.php%3F&step=2&cktime=31536000&pwuser=用户名&pwpwd=密码&lgt=0&question=0&customquest=&answer=
    用你的代码就不行了.


    我是包子!
    2009年10月6日 5:47
  • 修改编码方式
    【孟子E章】
    2009年10月6日 13:41
    版主
  • 使用前最好用HttpWatch这类软件在浏览器里看下提交的东西,然后再修改相应的代码
    2009年10月7日 4:46
  • 我用HttpAnalyzer比较过2种程序提交的内容,发现.net程序少了几个标头,但不知道在哪设置.


    我是包子!
    2009年10月7日 5:38
  • 您好,请参考:http://msdn.microsoft.com/en-us/library/965xw3x5.aspx
    希望有帮助!

    2009年10月7日 6:37
  • 标头一样了,但是还是不行.


    我是包子!
    2009年10月7日 8:31
  • 那应该是数据格式的问题了吧。
    浏览器也是程序做的,一般情况下,浏览器能做的,.NET也可以实现
    【孟子E章】
    2009年10月7日 8:52
    版主
  • 首先你要搞明白,是POST方式,还是GET方式的。
    另外,参考
    类似的疑难例子

    http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/97cd7924-6a86-4816-b266-87b8d43fd14c
    【孟子E章】
    2009年10月7日 9:01
    版主
  • GET没问题,就POST有问题.
    我是包子!
    2009年10月7日 9:06
  • 地址:http://www.5d6d.com/logging.php?action=login&referer=bbscp.php
    POST数据:username=用户名&password=密码&submit=+&formhash=36a2650c&loginfield=username&loginsubmit=true
    能行
    地址:http://www.phpwind.net/login.php
    POST:jumpurl=http%3A%2F%2Fwww.phpwind.net%2Findex.php%3F&step=2&cktime=31536000&pwuser=用户名&pwpwd=密码&lgt=0&question=0&customquest=&answer=
    这个就不行了,真奇怪,有没有通用的?
    我是包子!
    2009年10月7日 9:33
  • 这个表单没有什么特殊的,应该是可以的。因为现在停止了注册,如果你有帐号,可以发来测试一下
    【孟子E章】
    2009年10月7日 10:11
    版主
  • 地址:http://www.5d6d.com/logging.php?action=login&referer=bbscp.php
    POST数据:username=用户名&password=密码&submit=+&formhash=36a2650c&loginfield=username&loginsubmit=true
    能行
    地址:http://www.phpwind.net/login.php
    POST:jumpurl=http%3A%2F%2Fwww.phpwind.net%2Findex.php%3F&step=2&cktime=31536000&pwuser=用户名&pwpwd=密码&lgt=0&question=0&customquest=&answer=
    帐号:hljjtqwe
    密码:111111
    两个一样


    我是包子!
    2009年10月7日 10:35
  • 用同一个function你会发现第一个POST能成功,第二个就不行了.


    我是包子!
    2009年10月7日 10:35
  • 不同的网站处理方式不同,这不奇怪
    【孟子E章】
    2009年10月7日 12:51
    版主
  • 有没有通用的?即有不同的内容可以用参数修改,那样的代码改怎么写?


    我是包子!
    2009年10月8日 1:50
  • 是不是要传cookie
    http://feiyun0112.cnblogs.com/
    2009年10月14日 1:40
    版主
  • 通用的代码应该怎么写的?


    我是包子!
    2009年10月16日 14:39