2017-02-06 18 views
0

HTTPS経由の認証が必要なAPIからデータを取得しようとしています。PHP HTTP/1.0 400 APIからの不正なリクエスト認証ヘッダーでのリクエスト

failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

$api_url = 'https://api...'; 

$client_id = 'user'; 
$client_secret = 'pass'; 

$context = stream_context_create(array(
    'http' => array(
     'header' => "Authorization: Basic " . base64_encode("$client_id:$client_secret"), 
    ), 
)); 

$result = file_get_contents($api_url, false, $context); 

は私が認証サーバーからデータを取得することができませんなぜ、特定の理由があるだろう:私は、しかし、私はエラーを取得していたデータを取得するために「のfile_get_contents」を使用した場合、正しい認証を持っています?

答えて

1

あなたは正しい方法で認証を行っています。 PHPコードが正しいです。

問題はリクエストのURLだと思います。 レスポンスは400コードを返すので、これは認証が機能するがAPIへのリクエストURLが間違っていることを意味します。

コード400:要求が間違っているか間違っているなど、リクエストが正しくありません。

コード401:権限がありません。 (あなたではありません)

この情報は役に立ちましたか? チェックのURL paramsが、あなたがまたはURL、またはAPI :)

Byee

編集ソリューションの詳細に関する情報を投稿することができた場合、APIのドキュメントをお読みください。

チェックURLはいくつかの特別な文字やスペースを持っている場合。たぶんあなたはURLをエンコードする必要があります。

警告:すべてのURLはエンコードせず、パラメータ値のみをエンコードしてください。

例:

http ://example.com/test?file=This is a file.txt 

へ:私は手動で自分のブラウザにURLをコピーして、私はデータを取得し、認証パラメータを追加する場合

http ://example.com/test?file=This%20is%20a%20file.txt 
+0

は変更されません。リクエストURLは正しい – BDillan

+0

さて、あなたは認証が基本的なのですか? – SteeBono

+0

はい、認証は基本です – BDillan

0

あなたheaderキーの値は、リクエストのヘッダーを含む配列でなければなりません:

$api_url = 'https://api...'; 

$client_id = 'user'; 
$client_secret = 'pass'; 

$context = stream_context_create(array(
    'http' => array(
     'header' => array("Authorization: Basic " . base64_encode("$client_id:$client_secret")) 
       //^check here 
    ), 
)); 

$result = file_get_contents($api_url, false, $context); 
+0

いいえ、何も – BDillan

0

HTTPエラー400は、「不正な要求」を意味します。

リモートサーバーがあなたの要求に満足していません。 $ context変数を正しく構築していない可能性があります。

関連する問題