本帖最后由 in2008 于 2013-01-22 14:51:22 编辑

解决方案 »

  1.   

    没用过这个组件,估计和WinHttpRequest 差不多
    WinHttpRequest 组件post数据的时候是放在send参数里的
      

  2.   

    首先你需要一个截获POST或GET数据的浏览器插件 ,IE的话可以用httpwatch,谷歌浏览器,直接在网页上右击鼠标,审查元素里的Network
      

  3.   

    还有一个是WSockExpert可以对运行程序进行抓包,不过自身dll文件容易被认为木马
      

  4.   


    Request URL:http://123.123.123.123/WEW/logon.do
    Request Method:GET
    Status Code:200 OK
    Request Headersview source
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:zh-CN,zh;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Cookie:JSESSIONID=C47080F232E20BBA22071910FE34ADBD
    Host:123.123.123.123
    User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1
    Response Headersview source
    Content-Language:zh-CN
    Content-Length:6803
    Content-Type:text/html;charset=utf-8
    Date:Tue, 22 Jan 2013 07:39:26 GMT
    Server:Apache-Coyote/1.1
      

  5.   

    登陆后:Request URL:http://123.123.123.123/WEW/security_check
    Request Method:POST
    Status Code:302 Moved Temporarily
    Request Headersview source
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:zh-CN,zh;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:44
    Content-Type:application/x-www-form-urlencoded
    Cookie:JSESSIONID=C47080F232E20BBA22071910FE34ADBD
    Host:123.123.123.123
    Origin:http://123.123.123.123
    Referer:http://123.123.123.123/WEW/logon.do
    User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1
    Form Dataview URL encoded
    j_username:user
    isOk:1
    j_password:123456
    Response Headersview source
    Content-Length:0
    Date:Tue, 22 Jan 2013 07:41:45 GMT
    Location:http://123.123.123.123/WEW/checkPassword.do
    Server:Apache-Coyote/1.1
      

  6.   

    你在抓取的界面看提示,比如谷歌浏览器里 提交后,看method 这里有很多的GET和POST,如果你是表单提交的话,看POST的这一项
    同样WSockExpert也是有提示的
      

  7.   

    Request URL:http://123.123.123.123/WEW/security_check 这个URL http://123.123.123.123/WEW/security_check就是你要POST的地址
    --------------------------------
    j_username:user
    isOk:1
    j_password:123456
    --------------------------------
    这里是你POST的数据,写在XMLHTTP的时候,要写成j_username=user&isOk=1&j_password=123456
      

  8.   

    你这个提交后 Status Code:302 Moved Temporarily 
    302跳转的话,XMLHTTP一般获取不到跳转页面,还是建议你用一下winsock控件吧
      

  9.   


    另外
    有时候会有jsessionid ,我可不可以获取jsessionid,提交表单时是不是要加在提交地址里,怎么加?http://123.123.123.123/WEW/security_check;jsessionid="+text+"&j_username=user&isOk=1&j_password=123456 看这样写对不对
      

  10.   


    '首先 工程-引用Microsoft XML,v3.0
    Dim postdata As String
    Set mxmlhttp = New MSXML2.XMLHTTP
     urls="http://123.123.123.123/WEW/security_check"
    mxmlhttp.open "POST", urls, False'urls是你要POST的网址'True为异步'mxmlhttp.setRequestHeader "Content-Length", Len(sendstr)'这一段是要发送的HTTP协议头,根据你的需要按行增加
    mxmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    'XMLHTTP是使用IE的cookie,不能自定义
    '也不能自定义来路sendstr="j_username=user&isOk=1&j_password=123456" '这个是你要提交的数据 
    '如果还需要增加其它提交字段 比如jsessionid 值是123456 那么直接在数据段添加,
    '写成这样"sendstr=j_username=user&isOk=1&j_password=123456&jsessionid=123456"
    mxmlhttp.send sendstr '提交数据'接收返回数据
    postdata = mxmlhttp.responseText '如果网页源码是UTF-8则可以直接使用接收数据,
    '如果是GB码,用postdata =StrConv(mxmlhttp.responseBody, vbUnicode, &H804)函数转换一下Set mxmlhttp = Nothing
     
      

  11.   

    302跳转的话,XMLHTTP警衔 取不到跳页面,是不是意味着我不能确定提交是否正确完成?或者怎样判断是否登陆成功?
      

  12.   

    跳转了XMLHTTP是取不到跳转的网址,XMLHTTP是一个太监控件(被阉割很多功能),用WINSOCK控件可以看到很多数据
      

  13.   

    关于登陆是否成功,你要先POST,然后再GET后台网址看看是不是登陆后的数据,因为XMLHTTP是使用IE的COOKIE的,所以POST成功的话,一般登陆了的COOKIE就保存好了,但是有一些网站很特殊,不拿到跳转网址是登不上去的,我看你的好像是自己的网站,不会这么复杂,直接POST再GET一个后台网址试试看是不是登陆了
      

  14.   

    非常感谢,网站不是自己的。网上winsock提交表单的资料好少,感觉有点复杂了,POST页面,有时候会成这样:
    URL:http://123.123.123.123/WEW/security_check;jsessionid=003EE55EFC5E96DAF6ED9B539F41DBF8  (这个jsessionid不知道什么时候会出来,后来试了几次没出来,ID值猜想应该是LOGON.DO打开时就出来的那个)有时候URL:http://123.123.123.123/WEW/security_check
    每次打开http://123.123.123.123/WEW/logon.do 页面,都会有个
    Cookie:JSESSIONID=003EE55EFC5E96DAF6ED9B539F41DBF8
    (这个就是POST成功后的那个JESSIONID)可否在打开logon.do页面,时就获取到这个COOKIE 的JSESSIONID值,然后,再判断是否需要在POST页面加这个JSESSION值
      

  15.   


    刚才下载了一个winsock实例程序,直接填写了相关内容,POST后,也不知道是不是成功了。当然这次的提交没有涉及到JSESSIONID
    以下是:自己表单HTTP REPONSE获得的数据
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Set-Cookie: JSESSIONID=12175AA7A277D58B849D4EF86374E1C8; Path=/WEW/; HttpOnly
    Content-Type: text/html;charset=utf-8
    Content-Language: zh-CN
    Content-Length: 6847
    Date: Tue, 22 Jan 2013 12:05:42 GMT
    Connection: close  (但这里显示连接断了)
    我看到INDEX.DO页面上(GG获取),也有个
    Request Method:GET
    Status Code:200 OK
      

  16.   

    上面这个POST 显示200 OK弄错了,POST的页面是LOGON.DO看错了应该是POST http://123.123.123.123/WEW/security_check
    如下:
    HTTP/1.1 302 Moved Temporarily
    Server: Apache-Coyote/1.1
    Set-Cookie: JSESSIONID=9B1F32C0EAE504F3AF1E9E3010557484; Path=/MAS6/; HttpOnly
    Location: http://123.123.123.123/WEW/logon.do;jsessionid=9B1F32C0EAE504F3AF1E9E3010557484?logon_err=true
    Content-Length: 0
    Date: Tue, 22 Jan 2013 12:46:15 GMT
    Connection: close应该没有成功吧
      

  17.   

    Location: http://123.123.123.123/WEW/logon.do;jsessionid=9B1F32C0EAE504F3AF1E9E3010557484?logon_err=true这个就是你跳转到的网址,GET这个网址应该能看到是什么结果
      

  18.   


    应该是没有成功,成功后应该是
    Location:http://123.123.123.123/WEW/checkPassword.do
      

  19.   


    上面这个POST是没有考虑JSESSIONID,所以肯定不成功。它每个页面都带JSESSIONID认证的,如果换窗口打开,就要求重新登陆了,我想知道如何在打开下一个页面时,把当前页面的JSESSIONID一起带过去
      

  20.   


    有扣扣吗?方便的话加一下,我内信你了。
    另外,登陆好像成功了,但登陆后,有个对话框卡在那边。我再直接GET其它登陆后的页面,就超时了,应该要带COOKIE才行,不知道怎么弄了