2016-07-20 6 views
0

私は、接続に使用するトークンを提供するAPIを使用しています。それはこれらの指示を与える。PHPカールリクエストでAuth Digestヘッダー変数を使用する

その後、このトークンは、ヘッダー変数Auth Digestのサーバーへのすべての呼び出しで送信されます。

この意味はわかりません。私はいくつかのアプローチを試し、いくつかのスタックオーバーフローの質問を読んだ。ここで私が試したことがあります。詳細については、コードコメントを参照してください。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 

// I have tried setting both of these 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); 

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

// In combination of the above separately, I have tried each of these individually 
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $token); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Auth Digest: ' . $token)); 

curl_setopt($ch, CURLOPT_POST, true); 
$post_data = array('Auth Digest' => $token); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); 

curl_setopt($ch, CURLOPT_USERPWD, $token); 

// Then I execute and close, either giving me a failed response and a response that says token is not valid 
$response = curl_exec($ch); 
$header_sent = curl_getinfo($ch, CURLINFO_HEADER_OUT); 
if (!$response) { 
    echo $action . ' curl request failed'; 
    return false; 
} 
curl_close($ch); 
$response_json = json_decode($response); 
var_dump($response_json); 

ここでは、成功していない問題に私が適用しようとしたいくつかの関連するスタックオーバーフローに関する質問があります。私は、彼らがそう期待している生のHTTPヘッダまたはどのように私は、彼らがそう期待しているヘッダを生成するPHPのカールを使用することができますを知っておく必要があり

Curl request with digest auth in PHP for download Bitbucket private repository

Client part of the Digest Authentication using PHP POST to Web Service

How do I make a request using HTTP basic authentication with PHP curl?

+1

通常、 '$ headers = array(" Authorization:Digest $ token ");のように見えますが、それ以上のこともあります。 APIや正確な詳細を知らなくても、私たちは推測できます。 – drew010

+0

@ drew010が動作します。あなたが答えとして投稿できるなら、私は受け入れます。ヘッダーのすべての行を手動で設定する必要がある 'CURLOPT_HTTPHEADER'を使わずに、' curl_setopt'を使ってどのようにしたらよいかを示していただければ幸いです。 – Goose

+0

私は答えを加えました。私はあなたのコメントを完全に理解しているのか分かりませんが、CURLOPT_HTTPHEADERを使用しても、ヘッダーのすべての行を手動で設定する必要はありません。これは、カールにオプションがない、またはより大きなコントロールを必要とする追加のヘッダーを渡すことができます。まだ他のことはすべてやっています。 – drew010

答えて

1

アンダイジェスト認証ヘッダーは、一般的に次のようになります。だからあなたの場合には、してみてください

Authorization: Digest _data_here_ 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
//... existing options here 
$headers = array(
    'Authorization: Digest ' . $token, 
); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$response = curl_exec($ch); 

あなたがCURLOPT_HTTPHEADERを使用している場合は、単に送信するために、追加のヘッダーを指定し、必要としないことそこにすべてのヘッダーを追加します。

送信している他のヘッダーに明示的なオプションがある場合は、それらを使用して、1つの認証ヘッダーをCURLOPT_HTTPHEADERに渡します。

関連する問題