所以这很奇怪。我正在制作一个cURL登录脚本,我需要将我的cookie完全发送给cURL。但似乎cURL在内存中保留了旧cookie,即使cookie文件被完全截断也是如此。
在下面的输出中,请注意我尝试点击amazon.co.uk
,但我以前来自amazon.com
的Cookie仍然位于Cookie文件的顶部。这足以让亚马逊不让我登录。所以我需要新鲜的饼干。
现在,您看到的第一个cookie输出是起点。发生了什么每次我刷新页面。 即使最终的Cookie输出不是这个。它只是amazon.co.uk
个Cookie。
其他Cookie是"工作"是因为在登录页面上,(你看到"需要干净的会话"。我正在呼叫curl_setopt($ch, CURLOPT_COOKIESESSION, true);
只从文件中正确发送cookie。
但是在那之后,当我不再打电话时,它会回到这些存储的cookie。我不能每次都打电话给COOKIESESSION,因为我需要它记住要求请求的cookie。
所以基本上,我只需要一种方法来清除cookie的cURL内存,或者沿着这条线的东西。然后在你说'#34;删除文件"你可以从输出中看到我正在清除cookie文件。
string(125706) "
string(78) "https://sellercentral.amazon.co.uk/gp/fba/core/data/collections/shipments.html"
string(12) "need to init"
string(1704) "# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.amazon.com TRUE / FALSE 1429875358 session-id-time 1429858800l
.amazon.com TRUE / FALSE 1429875358 session-id 181-0028548-4275101
.amazon.com TRUE / FALSE 1429875532 ubid-main 191-9297218-7050950
.amazon.com TRUE / FALSE 1429875358 session-token cL5vcznqgzk2RwhZIFZjSepKiznVnNcdv1Uh/FiLV8i0QuxpPEEx5D94imjktXu69QOdfQuQX8chNhvB8sR9KI4ZgJBWWlMnFOepyO6/+wtH9GOtH+1WMZQKHp8fqGJlpMtT8XMwKUx+hnuYRPnheq54s5Q1fQX5HJ4wS3KE4UVHAady2H4ugSsIi+O33zL1d3eWN4TnbX4nxiHqIqFs4Q8GGCYVEwOrbcB1KH3FCohbrwQPXNN7igf6jQXI++h0N0dJTv781sU=
.amazon.com TRUE / FALSE 2059990558 x-main "i6iLU3A?45qEpvgw@NNzGTsxqqOvwryX"
.amazon.com TRUE / TRUE 2059990557 at-main 5|7HZSLL/JbN/aGiGYXo/uxjxNFyLucyEmxBCKkR4QoU06R5NF4I1eNekoJpsyE2hkx5FrSI3dP5DuaolT5D48jdz6NLwDmYdKzovka+5DJTHuRuVmzBVVkW2g40uhZlRlaHJmewKWCjmoyi+azkQswRDRmfyAICX+hBrRfUwJRwQqeOhQGc6dujYHDBiv8nxcQFciY9G+7au3zYAGof+CepYeiWk4xuQmBLobVAci10frgDxdgV7OdJOSVaHz2UtykTQ+F4V4hNzFwclsv9ranLMSM5KH9tys
.amazon.com TRUE / TRUE 0 sess-at-main "GR5GAfuX5U+vC3ayUz3LIUs7+o414SBlsEA1rVMyvvA="
.amazon.com TRUE / FALSE 2059990557 lc-main en_US
.amazon.co.uk TRUE / FALSE 1429875575 session-id-time 1429858800l
.amazon.co.uk TRUE / FALSE 1429875575 session-id 276-1602919-0207204
.amazon.co.uk TRUE / FALSE 1429876234 ubid-acbuk 277-6716334-7531852
.amazon.co.uk TRUE / FALSE 1429875881 session-token gVQymTdZsxCD0I/aObEZCLmujDKZGjQ48lGc34xaW6i45XVIonC1YK014YrFqVvNG2qurp1xmGrtCHcuVQx2tSQ7LlYpr+srdgyKvj/pCcW6CxR0azqQsU9wYW3BxXqZnQDQnqVmYaGpY0eB19BOTShppMKGnPhzMkgy/UFVuoeGsngx0tz8iWFMy6qTZFqibPoMvFmpsdsL8GhbVn6sy++vUUBeQhVgyzktWEfjRXdzZw32t/SOCA==
"
string(21) "unexpected login page"
string(78) "https://sellercentral.amazon.co.uk/gp/fba/core/data/collections/shipments.html"
string(12) "need to init"
string(0) ""
string(25) "no cookies, need to login"
string(51) "https://sellercentral.amazon.co.uk/gp/homepage.html"
string(0) ""
string(28) "on login, need clean session"
string(44) "https://sellercentral.amazon.co.uk/ap/widget"
string(270) "# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.amazon.co.uk TRUE / FALSE 1429876317 session-id-time 1429858800l
.amazon.co.uk TRUE / FALSE 1429876317 session-id 278-1385775-5645645
"
string(112) "https://sellercentral.amazon.co.uk/gp/utilities/set-rainier-prefs.html?ie=UTF8&url=&marketplaceID=A1F83G8C2ARO7P"
string(1212) "# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.amazon.co.uk TRUE / FALSE 1429876318 session-id-time 1429858800l
.amazon.co.uk TRUE / FALSE 1429876318 session-id 278-1385775-5645645
.amazon.co.uk TRUE / FALSE 1429876318 ubid-acbuk 279-4986453-7111520
.amazon.co.uk TRUE / FALSE 1429876318 session-token YpneIOOGKiqQ8x/E/soTTmUAym3tXUWGtjXKYWnAONOkcHENmQxMDD3zTWjgtLN9b/em0xBTPoYMpECUcR38rZlf2Vu1a2TOBNsi2hpTjageCvIM9noPlEq0TBrgdOEfGl354j0+dIfTHM4ObUF2nzY2UBubZoi3X77MBcpLel+rjjCFeTCwhmNFbru5dyalIRn1UyVAdsB3PIEk+saDDbf2HRMUFP7hdaCaBhKwb5tpyvpA1xrk2XJXm2dre2FE1MKsgWFwt1c=
.amazon.co.uk TRUE / FALSE 2059991518 x-acbuk 3IkDIKmc71d9lKFefDy7ATw1QKYl8545
.amazon.co.uk TRUE / TRUE 2059991518 at-acbuk "5|/QlP2Fp+YlPLm1O0znctkujc6sMDGnEGxbqVjtrNehg2P98QG1vCFOkKxChCaUJzPmQSS4C/87WM0XC30721BVwFLpKRa9FIS9sUtlZJh8m07RHhC2vBspsYjZ710LfM/cHCHKXdBmXlHZ8CLNO55ff4oYRI5NnaFKu8dx2xSBdwAzYydTqlQhrOKE0RAolHBJgIVngWDlw42kDY79FOciZP7ray/qSR/eceAPfJfzIV0t/vKC/vWpNlOQBs/FTmvWmEMZtSoAUWlgPeIiUw+g=="
.amazon.co.uk TRUE / TRUE 0 sess-at-acbuk "9EziH1irfB0flBfODA2zw+lVgvo4OmENH4XM3kxEnpg="
.amazon.co.uk TRUE / FALSE 2059991518 lc-acbuk en_US
答案 0 :(得分:1)
遇到问题时,我经常将FOLLOWLOCATION
设为false:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
如果有重定向,您可以看到正在发生的事情,并且需要获取在重定向网址的响应标头中设置的Cookie,然后FOLLOWLOCATION
必须设置为false。
当curl网址转到重定向curl_getinfo
时,会获得重定向位置网址。
$status = intval(curl_getinfo($ch,CURLINFO_HTTP_CODE));
if ($status > 299 && $status < 400){
$url= curl_getinfo($ch,CURLINFO_REDIRECT_URL );
}
// update cookies, do not clear `cookies()`;
当它变得困难时,我使用这些选项来获取响应和响应标头。响应标题将返回curl_exec()
数据。请求标题将由curl_getinfo()
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$data = curl_exec($ch);
if (curl_errno($ch)){
$data .= 'Retreive Base Page Error: ' . curl_error($ch);
}
else {
$info = rawurldecode(var_export(curl_getinfo($ch),true));
$data = curl_exec($ch);
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$requestHeader= substr($data,0,$skip);
$data = substr($data,$skip);
$filename = parse_url($url, PHP_URL_HOST);
$filename .= parse_url($url, PHP_URL_PATH) . '.txt';
$fp = fopen($filename,'w');
fwrite($fp,$info\n$data");
fclose($fp);
$data = substr($data,$skip);
}
标题和HTML都存储在文件中。然后,您可以查看HTTP标头,HTML和JavaScript。有时cookie由JavaScript document.cookie设置,或者使用window.location重定向的页面,或者使用JS单击HTML表单的提交按钮。在这些情况下,可能需要刮掉饼干和/或从卷曲数据中重定向位置。
然后我使用FireFox Inspector或Chrome开发工具。
我转到网络标签页
在FireFox中,我转到“设置”并启用“#34;启用持久性日志&#34;
”
在Chrome中,我点击&#34;保存日志&#34;在网络选项卡上
然后我使用浏览器去任何我想要卷曲的地方。
现在我可以看到每个请求和响应,包括重定向,并将它们与保存标题进行比较。
当您需要标题看起来与保存的浏览器标题完全相同时:
创建一个数组以放置请求标头键值
使用您上传的Request标头中的确切内容填写Request数组
示例:强>
$request = array();
$request[] = "Host: www.example.com";
$request[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$request[] = "User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0";
$request[] = "Accept-Language: en-US,en;q=0.5";
$request[] = "Connection: keep-alive";
$request[] = "Cache-Control: no-cache";
$request[] = "Pragma: no-cache";
添加到卷曲:
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
很多时候,使用移动版本要容易得多。很多时候,桌面版本页面需要JavaScript而移动版本则不需要。我使用FireFox与用户代理切换器使用旧的Motorola用户代理来检索标头和HTML。然后我在curl的HTTPHEADER
:
request[] = 'User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0
更新结束
我觉得curl的饼干有问题,所以我写了自己的例行程序
为此CURLOPT_HEADER
必须为真。
curl_setopt($ch, CURLOPT_HEADER, true);
$data = curl_exec($ch);
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$requestHeader= substr($data,0,$skip);
$data = substr($data,$skip);
$e = 0;
while(true){
$s = strpos($requestHeader,'Set-Cookie: ',$e);
if (!$s){break;}
$s += 12;
$e = strpos($requestHeader,';',$s);
$cookie = substr($requestHeader,$s,$e-$s) ;
$s = strpos($cookie,'=');
$key = substr($cookie,0,$s);
$value = substr($cookie,$s);
$cookies[$key] = $value;
}
然后使用$ cookies []:
$cookie = '';
$show = '';
$delim = '';
foreach ($cookies as $k => $v){
$cookie .= "$delim$k$v";
$delim = '; ';
}
然后使用$ cookie:
curl_setopt($ch, CURLOPT_COOKIE, $cookie );