php curl不在以下位置
我试图访问的站点在url的末尾添加了一个查询字符串,该查询字符串对于会话ID是唯一的。我想发布到正确的url,该url的末尾有查询字符串,但它只是指向基本urlphp 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
$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电子材料