我目前有一个脚本,使用cURL在我的客户端其他服务器上加载页面。目前,设置是
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch,CURLOPT_USERAGENT,$useragent);
curl_setopt($ch, CURLOPT_HEADER, 0);
$usecookie = ROOT_PATH . "/public_html/football_parser/cookie.txt";
if($usecookie) {
if (!is_writable($usecookie)) {
return "Can't write to $usecookie cookie file, change file permission to 777 or remove read only for windows.";
}
curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
}
$output = curl_exec($ch);
我正在尝试加载两个示例网址
statto.com/football/teams/newcastle-united/2005-2006/results
和
statto.com/football/teams/newcastle-united/2008-2009/results
第二次加载没有任何问题。第一个无法在未设置curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE)
的情况下加载。然而,当它加载时,它会重定向到错误页面,但在我的浏览器中它很好。我被告知在这个页面上有一个307重定向,它在我在浏览器中看到的页面和我在cURL中获得的404错误页面之间切换。如果我删除了cookie UID,我可以在浏览器中显示此错误页面,但是我已经检查了我的服务器上的cookie文件,它似乎已设置好并且存在。
任何人都可以告诉我如何查看第一个网址,看看我在浏览器中看到的内容,而不是404重定向?
非常感谢
米歇尔
答案 0 :(得分:1)
当我以隐身模式(干净的jar jar)查看浏览器中的第一个网址时,会发生以下情况:
307 redirect
Cache-Control:post-check=0, pre-check=0
Cache-Control:no-store, no-cache, must-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:20
Content-Type:text/html
Date:Mon, 10 Sep 2012 08:30:40 GMT
Expires:Mon, 10 Sep 2012 08:30:40 GMT
Keep-Alive:timeout=5, max=50
Last-Modified:Mon, 10 Sep 2012 08:30:40 GMT
Location:/home/error/404
MS-Author-Via:DAV
Pragma:no-cache
Server:Apache
Set-Cookie:options=DD0505030; expires=Tue, 10-Sep-2013 08:30:40 GMT; path=/; domain=www.statto.com
Set-Cookie:uid=3bdb30f60000-00-00USbf62da837b5bb608f95715dea80a8efa; expires=Tue, 30-Oct-2012 08:30:40 GMT; path=/; domain=www.statto.com
Vary:Accept-Encoding
X-Powered-By:PleskLin
X-Robots-Tag:index, noarchive
如您所见,位置:/ home / error / 404。因此,这种行为仅仅是因为这个网站似乎犯了一个错误(我无法辨别任何可能的原因,这是正确的行为)。无论如何,为了弥补他们的错误,你必须首先设置cookie(向这个页面发出请求并重定向到404错误页面),然后使用你上次生成的cookie请求页面AGAIN周围。
希望你能做到:
$output = curl_exec($ch);
$output = curl_exec($ch);
我实际上无法记住是否需要重置curl句柄或其他东西,如果这不起作用尝试使用与上面使用的几乎完全相同的选项制作另一个curl句柄并在执行第一个之后执行它卷曲手柄。