[英]Login with cURL php Cookie
我需要幫助來進行如圖所示的登錄。 (www.hurl.it)
這應該使用cURL在PHP中完成。 這是我到目前為止所擁有的,但對我不起作用:
$c = curl_init('https://www.mkr.cl/users/login?redirect=/store/product/22207');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_AUTOREFERER, 1 );
curl_setopt($c, CURLOPT_HEADER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($c, CURLOPT_POST,true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'username=76696459-1&password=7669');
curl_setopt($c, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, 'cookies.txt');
$result = curl_exec($c);
curl_close($c);
print_r($result);
當我在此處進行測試時,您的代碼可以正常工作,並且實際上可以登錄。 我投票結束了這個問題,因為您只是說“它對我不起作用”,而沒有說明如何對您不起作用。
但是,在調試時,請勿使用print_r
,而應使用var_dump
。 例如,如果curl
出錯,則返回bool(false) ,而當您將bool(false)賦予print_r
,它絕對不打印任何內容,不提供任何提示。
但是,如果將bool(false)賦予var_dump
,則實際上將輸出bool(false)。
同樣,在專門調試curl
代碼時,啟用CURLOPT_VERBOSE
,它會打印出許多有用的調試信息。 當curl_exec
返回false時 ,應該使用curl_error()
提取錯誤消息。
簡而言之,替換$result = curl_exec($c);
有:
curl_setopt($c,CURLOPT_VERBOSE,true);
$result = curl_exec($c);
if(false===$result){
throw new \RuntimeException('curl_exec failed! errno: '.curl_errno($c).'. error: '.curl_error($c));
}
var_dump($result);
另外,如果在設置任何curl選項時遇到問題,curl_setopt返回bool(false),您在這里也將其完全忽略,不要這樣做! 使用類似:
function ecurl_setopt ( /*resource*/$ch , int $option , /*mixed*/ $value ):bool{
$ret=curl_setopt($ch,$option,$value);
if($ret!==true){
//option should be obvious by stack trace
throw new RuntimeException ( 'curl_setopt() failed. curl_errno: ' . curl_errno ($ch).'. curl_error: '.curl_error($ch) );
}
return true;
}
現在,如果您在應用設置時遇到問題,它會拋出一個異常,而不是默默地忽略setopt錯誤。 無論如何,應用CURLOPT_VERBOSE
,不要忽略setopt
返回值,並使用var_dump
而不是print_r
,如果仍然不起作用,則打印VERBOSE日志,以及由CURLOPT_VERBOSE
和var_dump
和curl_error
打印的curl_error
,然后我將收回我的結束投票。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.