2010-08-27 145 views
1

更新:變成我的代碼工程。瀏覽器緩存了以前失敗的響應。感謝指針。使用Curl登錄到NYTimes.com的問題

我正在構建一個原型,我想要做的一件事就是執行一項服務,如果用戶是NYTimes.com的有效成員,那麼通過提供他們的憑據。

使用curl,我試圖執行登錄到該網站,然後檢查成功或失敗。

我的代碼,下面,不返回錯誤,但我滴回到登錄頁面:

<?php 
class Login { 

    function Verify() { 
     print $this->getContent(); 
    } 

    function getContent() { 

     $url = 'http://www.nytimes.com/auth/login'; 

     // URI can be any NYT web page to be redirected to upon successful login 
     // SAVEOPTION and Submit2 are Optional but in original web form so included here 

     $fields = array(
      'is_continue'=> 'true', 
      'USERID'  => urlencode('ENTER_YOUR_USERNAME'), 
      'PASSWORD' => urlencode('ENTER_A_PASSWORD'), 
      'URI'  => urlencode('http://www.nytimes.com/robots.txt'), 
      'OQ'   => '', 
      'OP'   => '', 
      'SAVEOPTION' => 'YES', 
      'Submit2' => 'Log In' 
     ); 

     $fields_string = ''; 

     if(!$curld = curl_init($url)) { 
      echo "Could not connect to the specified resource"; 
       exit; 
     } 
     $ch  = curl_init(); 
     $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 

     foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
     rtrim($fields_string,'&'); 

     curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, "curl_login_cookie.txt"); 

     curl_setopt($ch ,CURLOPT_POST, count($fields)); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 

     ob_start(); 
     curl_exec ($ch); 

     curl_close ($ch); 
     $result = ob_get_contents(); 
     ob_end_clean(); 

     return $result; 
    } 
} 

$login = new Login; 
$result = $login->Verify(); 
?> 

任何指針或建議表示歡迎。

+2

爲什麼用戶想給你他們的nytimes.com憑證? – 2010-08-27 19:44:10

+0

捲曲嗎?我不是PHP或Curl大師,但我認爲這只是獲得。 – tster 2010-08-27 19:46:37

+0

@tster curl絕對可以POST。 – 2010-08-27 19:47:24

回答

1

您需要檢查curl_exec的結果是否爲假(如果執行失敗,將會發生這種情況)。

如果成功,請嘗試檢查curl_errnocurl_getinfo的結果以查看有關操作的信息。

另外,最好在curl對象上設置CURLOPT_RETURNTRANSFER選項,而不是使用輸出緩衝來捕獲結果。