php curl不跟随位置

时间:2014-06-30 13:52:55

标签: php curl

我尝试访问的网站在网址末尾添加了一个查询字符串,查询字符串对于会话ID是唯一的。我想发布到最后有查询字符串的正确url,但它只是去基本网址。

$curlarr    = array(
              CURLOPT_URL   => "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber",   
              CURLOPT_POST  =>  TRUE,
              CURLOPT_POSTFIELDS     => urlencode($fields),
              CURLOPT_HEADER => TRUE,
              CURLOPT_REFERER => "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber",
              CURLOPT_RETURNTRANSFER => TRUE,
              CURLOPT_FOLLOWLOCATION => TRUE
            );

curl_setopt_array($curlconf,$curlarr);
$result = curl_exec($curlconf);
echo curl_getinfo($curlconf, CURLINFO_EFFECTIVE_URL);

curl_getinfo的回显返回基本网址:"http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber"

如果您要将此基本网址输入浏览器,则会将您重定向到:http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1,并且每次有新会话时前1(e1)都会增加

1 个答案:

答案 0 :(得分:1)

第一个url将您重定向到另一个带有令牌的服务器,该服务器发送的变量(var name:execution);你应该为每个未来的http请求使用这个变量。似乎每次都会控制它,可能是为了避免浏览机器人。

这是第一页:

#curl  http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1">http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1</a>.</p>
</body></html>

您使用了CURLOPT_FOLLOWLOCATION,这很好,但您还必须存储cookie(CURLOPT_COOKIEJAR)并将其用于下一个http请求(使用CURLOPT_COOKIE)

实际上,不要再使用CURLOPT_FOLLOWLOCATION了。你不想在途中丢失你的cookie。您可以解析第一页,获取“execution = xxxx”,然后使用cookie进一步。

编辑:有时,使用友好提供的API可以避免卷曲浏览。