簡體   English   中英

使用cURL php Cookie登錄

[英]Login with cURL php Cookie

我需要幫助來進行如圖所示的登錄。 (www.hurl.it) 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_VERBOSEvar_dumpcurl_error打印的curl_error ,然后我將收回我的結束投票。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM