我發現捲曲的餅乾罐有問題的,所以我寫了我自己的程序。還有一些時候我需要添加從頁面中刪除的cookies。
對於此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;
}
然後使用$餅乾[]:
$cookie = '';
$show = '';
$delim = '';
foreach ($cookies as $k => $v){
$cookie .= "$delim$k$v";
$delim = '; ';
}
然後使用$餅乾:
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
遇到麻煩時,我經常設置FOLLOWLOCATION
爲false:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
如果存在重定向,您可以看到發生了什麼,並且需要獲取在重定向URL的響應頭中設置的Cookie,則FOLLOWLOCATION
必須設置爲false。
當curl URL將您帶到重定向curl_getinfo
時,將獲得重定向位置URL。
$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由document.cookie設置,或者用window.location重定向頁面,或者用JS單擊HTML表單的提交按鈕。在這些情況下,可能需要刮取cookie和/或從curl數據重定向位置。
然後我使用FireFox Inspector或Chrome開發工具。
我去網絡選項卡
在Firefox中,我去設定,並開啓「啓用持久性日誌」
在Chrome中我點擊「保存日誌」在網絡選項卡
然後我使用瀏覽器去任何我想要去捲曲的地方。
現在我可以看到每個請求和響應,包括重定向並將它們與保存標題進行比較。
當你需要的頭看起來就像保存瀏覽器標題:
創建一個數組把請求頭鍵值
填寫申請陣列,使正是在請求上傳的標題。
例:
$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。然後,我使用相同的用戶代理捲曲的HTTPHEADER
:
request[] = 'User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0
發佈「cookie.txt」中的內容 – Machavity
只需將SESSID放在Cookie中並不意味着您已經登錄。它僅表示服務器可以將您識別爲來自SESSID的客戶端。你也必須登錄。 –
嗨,在文件中有這樣的信息:#Netscape HTTP Cookie文件 #http://curl.haxx.se/rfc/cookie_spec.html #此文件是由libcurl!編輯需要您自擔風險。 site.com \t \t FALSE/\t \t FALSE 1429265797 \t ZBW_SESSID –