我正在尝试使用cURL从PHP的此URL下载文件。
https://www.geopoi.it/geopoiAPI/php/utils/omixml/getOMIXML.php?&t=p&f=KML&id=61932577_ras
我解析PHP形式的验证码,管理cookie等,然后,当我要下载任何内容时,都不会发生。这是响应头:
HTTP/1.1 200 OK
Date: Thu, 25 Oct 2018 09:36:51 GMT
Server: Apache
X-Powered-By: PHP/5.4.15
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: must-revalidate
Pragma: no-cache
Content-Length: 0
Connection: close
Content-Type: text/html
这是我的代码:
curl_setopt ($curl, CURLOPT_URL, 'https://www.geopoi.it/geopoiAPI/php/utils/omixml/getOMIXML.php?&cf=RTRRTR89T55F205K&p1=5&p2=2&p3=5&cod='.$captcha.'&ok=2&t=p&f=KML&id=553423949_ras');
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_HEADER, 1);
curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($curl, CURLOPT_BINARYTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_TIMEOUT, 300);
curl_setopt ($curl, CURLOPT_USERAGENT, 'any');
curl_setopt ($curl, CURLOPT_VERBOSE, true);
curl_setopt ($curl, CURLOPT_HTTPHEADER , [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language: es-ES,es;q=0.9,en;q=0.8,it;q=0.7,gl;q=0.6,fr;q=0.5,de;q=0.4',
'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
'Cookie: '. self::COOKIE_NAME . '=' . $cookie,
'Connection: keep-alive',
'Host: www.geopoi.it',
'Upgrade-Insecure-Requests: 1']);
我不明白,因为它可以在我的导航器中使用,但是使用cURL时,该呼叫无法正常工作。
有什么主意吗?
非常感谢!
答案 0 :(得分:0)
核心问题似乎是: 您的代码似乎无法处理表单返回的刷新元数据:
(...)
<meta http-equiv="refresh" content="0;url=getOMIXML.php?&t=p&f=KML&id=61932577_ras&cf=TSTTST80A01L152H&p1=1&p2=1&p3=1&cod=tnChb29&ok=2" />
(...)
以上内容以re <body>
的形式出现。
这意味着在您使用CURL查询表单之后,您需要抓取刷新元数据的响应并再次使用相同的请求数据来查询该URL。
这里有另一个与此问题类似的帖子: How follow meta redirect with curl and php? 因此,请尝试一下。