1

更新:私のコードが機能することがわかりました。ブラウザは以前の失敗した応答をキャッシュしていました。ポインタをありがとう。

私はプロトタイプを作成していますが、やりたいことの 1 つは、ユーザーが 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();
?>

任意のポインタ、または提案を歓迎します。

4

1 に答える 1

1

の結果が false でないことを確認する必要がcurl_execあります (実行が失敗した場合は false になります)。

成功した場合は、 と の結果を確認して、操作に関する情報を確認curl_errnocurl_getinfoてください。

CURLOPT_RETURNTRANSFERまた、出力バッファリングを使用して結果を取得するのではなく、curl オブジェクトにオプションを設定した方がよい場合もあります。

于 2010-08-27T19:52:29.057 に答える