3

curlトークン認証を必要とするリモート サーバー (Vebra Api) にリクエストを送信しています。私が収集できることから、サーバーは 1 時間に 1 つのトークン要求しか許可しません。現在のトークンが現在有効かどうかを識別しようとしています。

これに対する私のアプローチは、リクエストを作成し、ステータスが 200 か 401 かを確認することです。有効なトークンがあれば、curl 情報でcurl_getinfo($ch)正しいステータス コードを確認できます。トークンが無効であるにもかかわらず、エラーを処理できずにスクリプトが終了した場合、Firefox は、The connection was resetエラーを処理したり、他のコードを処理したりする前にそれを報告します。

これは私のコードの問題ですか、それともサーバーの問題ですか? このシナリオでcurl関数に何らかの関数を呼び出すように指示する方法はありますか?

次のようにコードします。

// an invalid token
$token = '1sdfsdfds1RQUlJTTU1GRVdVT0tYUkJsdfsdfsdfdsfsdSEg=';

//Initiate a new curl session
$ch = curl_init($url);

//Don't require header this time as curl_getinfo will tell us if we get HTTP 200 or 401
curl_setopt($ch, CURLOPT_HEADER, 0); 

//Provide Token in header
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '. $token ) ); 

// Tell curl to return a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Execute the curl session
$curlResp = curl_exec($ch);

// -----------------------------------------------------------------------------
// with invalid token script ends here with no chance for me to handle the error
// such as below
// -----------------------------------------------------------------------------

if ($curlResp === FALSE) {
    die('yarrrghhh! :(');
    //throw new Exception(); 
}

//Store the curl session info/returned headers into the $info array
$info = curl_getinfo($ch);

//Check if we have been authorised or not
if($info['http_code'] == '401') {

    echo 'Token Failed';

    var_dump($info);
    var_dump($curlResp);

} 
elseif ($info['http_code'] == '200') {

    echo 'Token Worked';

    var_dump($info);
    var_dump($curlResp);

}

//Close the curl session
curl_close($ch);
4

1 に答える 1