卷曲重定向,不工作?

时间:2010-04-02 08:46:10

标签: php curl

我正在使用以下代码:

$agent= 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0';

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERAGENT, $agent);

curl_setopt($ch, CURLOPT_URL, "www.example.com");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);

echo $output;

但它重定向到这样:

http://localhost/aide.do?sht=_aide_cookies_

而不是URL页面。

有人可以帮我解决我的问题吗?

2 个答案:

答案 0 :(得分:13)

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

http://docs.php.net/function.curl-setopt说:

CURLOPT_FOLLOWLOCATION
TRUE遵循服务器作为HTTP标头的一部分发送的任何“Location:”标头(注意这是递归的,PHP将跟随它发送的“Location:”标头,除非设置了CURLOPT_MAXREDIRS)。

答案 1 :(得分:8)

如果仅限于URL重定向,请参阅以下代码,我已经为您记录了这些内容,因此您可以轻松地使用它。直接,您有两个主要的cURL选项控制URL重定向(CURLOPT_FOLLOWLOCATION / CURLOPT_MAXREDIRS):

// create a new cURL resource
$ch = curl_init();

// The URL to fetch. This can also be set when initializing a session with curl_init().
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");

// The contents of the "User-Agent: " header to be used in a HTTP request.
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0");

// TRUE to include the header in the output.
curl_setopt($ch, CURLOPT_HEADER, false);

// TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// TRUE to follow any "Location: " header that the server sends as part of the HTTP header (note this is recursive, PHP will follow as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set).
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// The maximum amount of HTTP redirections to follow. Use this option alongside CURLOPT_FOLLOWLOCATION.
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

// grab URL and pass it to the output variable
$output = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

// Print the output from our variable to the browser
print_r($output);

以上代码处理URL重定向问题,但它不处理cookie(您的localhost URL似乎处理cookie)。如果您希望处理来自cURL资源的cookie,那么您可能需要提供以下cURL选项: CURLOPT_COOKIE CURLOPT_COOKIEFILE CURLOPT_COOKIEJAR

有关详细信息,请访问以下链接: http://docs.php.net/function.curl-setopt