php curl不在以下位置

php curl不在以下位置,php,curl,Php,Curl,我试图访问的站点在url的末尾添加了一个查询字符串,该查询字符串对于会话ID是唯一的。我想发布到正确的url,该url的末尾有查询字符串,但它只是指向基本url $curlarr = array( CURLOPT_URL => "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber", CURLOPT_POST => TRU

我试图访问的站点在url的末尾添加了一个查询字符串,该查询字符串对于会话ID是唯一的。我想发布到正确的url,该url的末尾有查询字符串,但它只是指向基本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的回显返回基本url:
“http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber“


如果要在浏览器中输入此基本url,它会将您重定向到:
http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1
每次有新会话时,第一个1(e1)都会增加

第一个url使用令牌(服务器发送的变量)将您重定向到另一个会话(变量名:execution);您应该在将来的每个http请求中使用此变量。似乎每次都会对其进行控制,可能是为了避免bot浏览

这是第一页:

#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>
#curlhttp://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber
302临时搬家
您请求的此文档已临时移动

现在是晚上

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

事实上,不要再使用CURLOPT_FOLLOWLOCATION。你不想在途中丢失cookie。你可以解析第一页,获取“execution=xxxx”,然后使用cookie继续


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

什么是
$fields
变量?它是字段组合的字符串。您可以显示其输出(
var\u dump
)?字符串(93)“tapByTrackSearch:refSearch:refNumbers=42342424&tapByTrackSearch:refSearch:ref\u submit\u按钮=&”是的,我在查看cookie,我找不到他们使用的cookie,即使我找到了,我也不知道如何使用cookie文件,你能举个例子吗?你可以将cookie存储在你的文件系统中并使用它:curl_setopt($curlconf,CURLOPT_COOKIEJAR,“/tmp/cookie.txt”);我们可以在Chrome/Developer tools/Resources/Cookies中找到所有cookie值。这可能不相关,但您是否查看了此API?希望它对企业和个人都有效?如果是,请接受答案是否有用,谢谢。如果不是,让我们进一步了解Cookii电子材料