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

问题描述 投票:0回答:1

我使用

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,此错误并不总是发生。

http autoit
1个回答
-1
投票

网站可能被用户代理和/或引荐字符串重定向/阻止。使用

InetGet()
尝试更改用户代理,并通过以下方式强制重新加载:

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)
© www.soinside.com 2019 - 2024. All rights reserved.