PHP CURL - 跟随位置和发布字段的问题

时间:2012-11-20 21:34:10

标签: php redirect curl session-cookies

我在维护会话Cookie和发布字段信息时遇到重定向问题。这是过程的方式:

1)访问URL,他们返回一个cookie和一个302响应(指向您刚刚访问的同一个URL)

2)使用他们提供的cookie重新访问URL,您可以看到正确的页面。

我可以通过CURLOPT_FOLLOWLOCATION = true访问正确的页面,但是我猜CURL在跟踪重定向时没有保留帖子字段,因此页面上没有有用的内容。

我尝试过手动存储cookie,并使用存储的cookie执行“重定向”,但是使用这种方法,我永远不会超过302重定向到正确的页面。这里提到的手动方法的代码如下。

$tmp_name = tempnam('tmp', 'COOKIE');
$url = "MY_URL";

$options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_REFERER => $url,
    CURLOPT_HEADER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => array(
        'field1' => 'postfield1',
        'field2' => 'postfield2',
    ),
    CURLOPT_VERBOSE => true,
);

// Make the first request, specifying where to store the cookie
// This request returns the cookie and the 302 response
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_name);
$resp1 = curl_exec($ch);

// Make the second request, using the cookie stored above
// Should return the proper page, but gives me the 302 again instead.
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmp_name);
$resp2 = curl_exec($ch);

是否有人知道上述代码有什么问题,或者是否有其他方法可以完成任务?

1 个答案:

答案 0 :(得分:1)

首先,发布数据永远不会保留在重定向上。所以不要担心,你不必提出两个请求。坚持

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

我还建议进一步调整以下内容:即使你提出两个请求,使用相同的curl资源,也不要关闭它来创建新的。另外,添加:

curl_setopt($ch, CURLOPT_FORBID_REUSE, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 0);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "valid user agent");

您还可以使用浏览器插件(即HttpFox)来检查所需的确切cookie和请求序列。您正在尝试模拟真实的请求,因此深入了解您的浏览器所做的一切可以提供很多帮助。