JSONのみを受け入れるAPIへの投稿を担当しています。これを実現するためにPHPのCURLを使用しています。
以前は問題なくAPIに投稿したことがありますが、JSONは慣れていないので、自分で調べて問題を解決しようとしましたが、うまくいきません。
投稿しようとしている会社の誰かと話していると、サーバーがサーバーにアクセスしていると言われました。唯一の問題は、投稿の本文が適切にフォーマットされていないJSONです。(この会社の誰もphpを知りません。 :(だから助けはありません)
これが私のコードです:
$jarr = array("ProviderID" => "L005A", "FirstName" => $first,
"LastName" => $last, "PhoneNumber" => $PhoneNumber,
"PhoneNumberType" => $PhoneNumberType);
$content = json_encode($jarr);
$curl_handle = curl_init("URL Im posting to");
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
'Accept: application/json;charset=utf-8',
'Content-Type: application/json;charset=utf-8',
'Expect: 100-continue',
'Connection: Keep-Alive'));
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 0);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$first = curl_exec($curl_handle);
curl_close($curl_handle);
echo "Result ";
echo $first;
私が与えられたドキュメントから、私が従わなければならない唯一のパラメータは次のとおりです。
方法:投稿
ヘッダー:
承認:application / json; charset = utf-8
コンテンツタイプ:application / json; charset = utf-8
期待:100-継続
接続:Keep-Alive
現在、スクリプトを実行すると、次の結果が返されます。
結果HTTP/1.1100続行HTTP/1.1 400不正な要求Cache-Control:no-cacheプラグマ:no-cache Content-Type:application / json; charset = utf-8有効期限:-1サーバー:Microsoft-IIS / 7.5 X-AspNet-バージョン:4.0.30319 X-Powered-By:ASP.NET日付:2012年11月1日木曜日15:43:18GMTコンテンツの長さ:26 {"record.ProviderID":[""]}
したがって、400エラーは、私の体が適切にフォーマットされていないために発生します。私の質問ですが、送信する必要のあるデータを適切なJSON形式でフォーマットするにはどうすればよいですか?
私が読んだことから、このコードはそれを行うべきですが、そうではありません:
$jarr = array("ProviderID" => "L005A", "FirstName" => $first,
"LastName" => $last, "PhoneNumber" => $PhoneNumber,
"PhoneNumberType" => $PhoneNumberType);
$content = json_encode($jarr);