web-dev-qa-db-ja.com

PHP Curl、アプリケーション/ jsonでデータの戻りを要求

APIからデータを取得しようとしていますが、現時点ではXMLとして取得しています。

私はそれをjSONとして好み、API DocはXMLだけでなくjSONでも利用できると言っています。

ドキュメントは言う...

APIは現在、XMLとJSONの2種類の応答形式をサポートしています。

リクエストのHTTP Acceptヘッダーを使用して、目的の形式を指定できます。

承認:application/xml承認:application/json

では、PHPコードでapplixation/jsonのAcceptヘッダーを生成するにはどうすればよいですか?

私のPHP現在のコードは:

header('Content-Type: application/json');

$endpoint = "http://api.api.com";

//  Initiate curl
$ch = curl_init();

// Set The Response Format to Json
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json'));

// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Set the url
curl_setopt($ch, CURLOPT_URL,$endpoint);

// Execute
$result=curl_exec($ch);

// Closing
curl_close($ch);

echo $result;

結果のエコーは、XML形式のデータを返すだけです。

前もって感謝します。

10
StuBlackett

リクエストでHTTPヘッダーを設定するコードを変更する必要があります。 Acceptヘッダーを指定していない

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));

これにより、HTTPリクエストがAPIのURLに送信され、特定の形式で応答を取得したい情報が含まれます。

編集(これが誰かに役立つ可能性がある場合):

  • Acceptヘッダーは要求ヘッダーであり、応答の本文の受け入れ可能なタイプを指定します
  • Content-Typeヘッダーは要求ヘッダーと応答ヘッダーの両方であり、要求/応答の本文の形式を指定します

HTTPリクエストの例は次のようになります(多くの場合、リクエストにはヘッダー部分のみが含まれます)。

GET /index.html HTTP/1.1
Host: www.example.com
Accept: application/json

そして、応答は次のようになります。

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 24

{
    "hello": "world"
}
21
user2073253