InetRead()和InetGet()返回0个字节

时间:2017-05-16 23:29:46

标签: http autoit

我使用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,并不总是会出现此错误。

1 个答案:

答案 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)