请教,我用WinHTTP_GetRespond函数get 不能正确返回网页源码[已解决]
本帖最后由 fastidium 于 2012-12-17 09:51 编辑我的源码:#include <WinHTTP_GetRespond.au3>
one()
Sleep(100)
two()
Func one()
$MyOpen = _WinHttpOpen()
$url = "http://searchb.dangdang.com/index.php?key1=%B4%BA%B7%E7%B2%BB%B8%C4&key4=&key2=%D1%F4%CC%A8%D2%BB%D3%E7&key3=&category_path=01.00.00.00.00.00&medium=01"
ConsoleWrite($url & @CRLF)
$rContext = _WinHTTP_GetRespond($MyOpen, $url, 2, 80000)
;ConsoleWrite($rContext)
If FileExists("soure1.txt") Then FileDelete("soure1.txt")
FileWrite("soure1.txt", $rContext)
EndFunc ;==>one
Func two()
$oHTTP = ObjCreate("microsoft.xmlhttp")
Local $url1 = "http://searchb.dangdang.com/index.php?key1=%B4%BA%B7%E7%B2%BB%B8%C4&key4=&key2=%D1%F4%CC%A8%D2%BB%D3%E7&key3=&category_path=01.00.00.00.00.00&medium=01"
ConsoleWrite($url1 & @CRLF)
$oHTTP.open("get", $url1, False)
$oHTTP.send()
$source1 = $oHTTP.responsetext
;MsgBox(0,0,$source1)
If FileExists("soure2.txt") Then FileDelete("soure2.txt")
FileWrite("soure2.txt", $source1)
EndFunc ;==>two
对ie操作我一直很迷茫,学习没有头绪,上面这两个源码也是从论坛修改的,用 ObjCreate这个能正确返回源码,为什么用WinHTTP_GetRespond这个不能正确返回源码呢?求各位老大指教啊,先谢谢了!
key1 key4 由转码工具得到:MsgBox(0,"",UrlEnc("春风不改"))
MsgBox(0,"",UrlEnc("阳台一隅"))
Func UrlEnc($Sz_url)
Local $str=StringTrimLeft(StringToBinary($Sz_url,1),2)
Local $ret
For $i=1 to StringLen($str) Step 2
$ret &='%' & StringMid($str,$i,2)
Next
Return $ret
EndFunc 这个问题我曾经也遇到过,呵呵,你注意看你的网址中有一段数据是包含了Url编码的 回复 2# qinylj
能详细讲讲么,我有点儿小白,不懂啊,请教,谢谢你 ; ==== 拆分网址 ====
$ConnectURL = _WinHttpCrackUrl($ConnectURL, $ICU_DECODE)
If @error Or Not IsArray($ConnectURL) Then Return SetError(1, 0, _GetLastError_Winhttp())
; ==== 重新定义变量,方便阅读 ====
Local $ServerHost = $ConnectURL
Local $Port = $ConnectURL
Local $ObjectFile = $ConnectURL & $ConnectURL
Local $sFlags = Default
If $ConnectURL = 2 Then $sFlags = $WINHTTP_FLAG_SECURE ;=====判断是否使用SSL连接这是_WinHTTP_GetRespond的一段代码
你仔细查看一下_WinHttpCrackUrl函数,_WinHTTP_GetRespond调用的参数为$ICU_DECODE,所以才会出现上述的问题
解决办法是要么自己再在_WinHTTP_GetRespond函数中添加一个参数设置_WinHttpCrackUr参数为$ICU_ESCAPE,但是我试过好像没用。
另一种方法也是在_WinHTTP_GetRespond函数中添加一段带代码,加一段函数把$ICU_DECODE后的文本再转成Url编码。 加UserAgent试试 回复 4# qinylj
谢谢你!让我明白不是我函数调用错误引起!
按你的指导,我又修改WinHttpCrackUr参数为$ICU_ESCAPE,加入MsgBox(0,"",$ObjectFile) 看到url链接是未转换的%B4%BA%B7%E7%B2%BB%B8这个格式,就像你说的运行还是取不到正确源码,对WinHTTP_GetRespond函数我要看懂还得慢慢琢磨,谢谢你热心指导! 回复 6# fastidium
这是winhttpCrackURL的问题,与Getrespond无关,喜欢的换用WinInetCrackURL就没问题的。
或者参照下列代码改一下就可以了:
; ==== 重新定义变量,方便阅读 ====
Local $ServerHost = $ConnectURL
Local $Port=$ConnectURL
Local $ObjectFile=$ConnectURL&$ConnectURL
If $Mode = 1 Then
Local $ObjectFiletmp=StringRegExp($sConnectURL,'//.*?(/.*)',3)
If Not @error Then $ObjectFile = $ObjectFiletmp
EndIf
Local $sFlags = Default
If $ConnectURL = 2 Then $sFlags = $WINHTTP_FLAG_SECURE ;=====判断是否使用SSL连接
使用时+512即可。 回复 7# republican
谢谢前辈大佬,我正在学习ie相关操作,谢谢提供_WinHTTP_GetRespond 函数!
另外,我怎么把帖子改为已解决呢?
页:
[1]