我使用InetRead()
监控多家商店的价格:
$data = BinaryToString(InetRead($url,1),4)
实际存在的某些URL返回0个字节。我试过InetGet()
并且它也没有返回任何数据。通过浏览器访问,页面正常显示。它返回HTTP状态代码202。
Global $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", $RequestURL, False)
$oHTTP.Send()
If $oHTTP.status == 200 Then
Return $oHTTP.ResponseText
Else
Return "ooops... status: " & $oHTTP.status & @LF
EndIf
我该如何解决这个问题?对于相同的URL,并不总是会出现此错误。
答案 0 :(得分:-1)
当您向服务器发出请求时,通过查看您的用户代理字符串和/或Referer字符串,网站可能会重定向/阻止。
如果您正在使用INETGET,请尝试更改AutoIT正在发送的用户代理,并通过设置以下内容强制在请求文件时重新加载:
HttpSetUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36")
InetGet("URL","filename",1)
或者,如果使用winhttp.winhttprequest.5.1对象,则尝试:
$oHTTP.Open("GET", $RequestURL, False)
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36")
$oHTTP.SetRequestHeader("Referer", $RequestURL)
$oHTTP.Send()
使用您自己的浏览器用户代理字符串,这只是我用于测试的字符串之一。
如果这不起作用,请尝试获取所有响应标头以缩小问题范围。在.Send()之后添加它,然后查看控制台窗口:
$AllResponseHeaders = $oHTTP.GetAllResponseHeaders()
consolewrite($AllResponseHeaders)