cURL Cookie和307重定向问题

问题描述:

我目前有一个脚本,使用cURL在我的客户端其他服务器上加载页面。目前,该设置是cURL Cookie和307重定向问题

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

好吧。这是我的浏览器中的_exact_行为:第一次失败,第二次成功,因此您必须在请求前发送cookie(或者使用相同的cookiefile/jar尝试两次)。 – Wrikken 2010-09-27 18:32:54

+0

感谢您的回复。如何在请求之前设置我的cookie - 是否在cURL时调用? – 2010-09-27 22:18:14

当我查看我的浏览器的第一个网址在隐身模式(清洁饼干罐)发生以下情况:

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 

正如你所看到的,地点: /家庭/错误/ 404。因此,这种行为仅仅是由于这个网站似乎犯了一个错误(我无法辨别出任何可能的原因是这是正确的行为)。无论如何,为了弥补他们的错误,你必须首先设置cookie(向这个页面发出请求并重定向到404错误页面),然后用你上一次生成的cookie请求页面AGAIN周围。

希望你可以这样做:

$output = curl_exec($ch); 
$output = curl_exec($ch); 

我不能真正记得,如果卷曲手柄需要重置或东西,如果这不起作用尝试再进行一次卷曲手柄几乎完全与上面使用的选项相同并在执行第一个卷曲手柄后执行它。