35888894 发表于 2011-11-4 13:20:03

[已解决]请教winhttp如何获取响应头信息

本帖最后由 35888894 于 2011-11-5 14:30 编辑

如图,捕获的请求头文件中含有Location信息

通过$sHeader =_WinHttpQueryHeaders($hRequest_E)函数只能获取部分头信息

请问如何才能获取到Location信息,谢谢

amxi 发表于 2011-11-4 14:02:53

表示不懂{:face (319):}

35888894 发表于 2011-11-4 14:30:39

通过实验,可以证明,如果进行多次跳转的话,返回的头为跳转后的信息头,那么新问题来了,如何获得没跳转以前的信息头呢?

35888894 发表于 2011-11-4 15:43:03

地址是:http://dev.5cfan.com/go.php

#include-once
#include "WinHttp.au3"
#include <array.au3>
#include <IE.au3>
; Register Callback function
;创建一个HTTP链接
Global$hOpen = _WinHttpOpen()
        If @error Then
                        MsgBox(48, "Error", "Error initializing the usage of WinHTTP functions.")
                        Exit 1
                EndIf

;链接至服务器
Global $cookie="sa=1; sb=2"
Global$hConnect = _WinHttpConnect($hOpen, "dev.5cfan.com")
Global $sendmessage=""
Global$sReturned= WInHttpGetMessage($hConnect,"GET","/go.php",$sendmessage,$cookie)

MsgBox(0,"",$sReturned)
_WinHttpCloseHandle($hOpen)



;作用:获取信息
;链接,类型平post还是get,Page,发送的信息;cookie
Func WInHttpGetMessage($Connect,$Type,$Page,$message="",$cookie="")
Local$hRequest_E = _WinHttpOpenRequest($Connect, $Type,$Page)
Local $sHeader=""

If $cookie<>"" Then
                _WinHttpAddRequestHeaders($hRequest_E, "Cookie:"&$cookie)        ;带着cookie走
        EndIf


_WinHttpSendRequest($hRequest_E, "Content-Type: application/x-www-form-urlencoded",$message)

_WinHttpReceiveResponse($hRequest_E)

$sHeader = _WinHttpQueryHeaders($hRequest_E,43)

MsgBox(0,"",$sHeader)


Local $sReturned_V
If _WinHttpQueryDataAvailable($hRequest_E) Then ; if there is data
    Do
      $sReturned_V &= _WinHttpReadData($hRequest_E,1)
    Until @error
EndIf


_WinHttpCloseHandle($hRequest_E)
Return $sReturned_V
EndFunc

返回的结果

35888894 发表于 2011-11-4 15:43:55

希望高手给予解答,谢谢

amxi 发表于 2011-11-4 16:14:47

{:face (319):}偶的这个版本没有winhttp

.個朲綉√ 发表于 2011-11-4 17:21:00

本帖最后由 .個朲綉√ 于 2011-11-4 17:31 编辑

你的问题和我的应该差不多吧,我不是用winhttp,我是用xmlhttp
$xmlhttp.getAllResponseHeaders

用getAllResponseHeaders无法获取到Cookie信息,郁闷啊

问了几个人也没解决,可能是跳转次数太多的原因吧.



只有在第一次提交数据时,能获取到Cookie,但是最终登陆成后功的Cookie并不是这个,而且获取不到.

下面这个就登陆成功后,没有Cookie信息...

35888894 发表于 2011-11-4 17:39:07

我的意思是获取Location,因为只有获得了Location才能生成后续的请求地址
PS :$xmlhttp.getAllResponseHeaders
也不是很好用,,,

suiyefeng 发表于 2011-11-4 18:50:25

“ _WinHTTP_GetRespond ... 完整的HTTP传输过程”这个udf里面有禁用重定向,。。。具体的我就不太清楚了,,,,看看有没有用吧

komaau3 发表于 2011-11-4 19:19:41

xmlhttp自带Cookies处理功能 不需要用户提供Cookies信息 对象会自己处理,如果添加了Cookies相关header,那么对象就会使用用户自定义Cookies了

.個朲綉√ 发表于 2011-11-5 11:12:30

回复 10# komaau3

    呵呵,谢谢,回头我再试试.....

35888894 发表于 2011-11-5 12:00:54

搞定了,添加一段代码即可...
_WinHttpSetOption($hRequest_E,$WINHTTP_OPTION_DISABLE_FEATURE,$WINHTTP_DISABLE_REDIRECTS)
页: [1]
查看完整版本: [已解决]请教winhttp如何获取响应头信息