1

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);
4

1 に答える 1

0

私は同じ問題に直面しました。デバッグ後、JSON 文字列の送信中に、整数値を引用または二重引用符で囲まないことが原因であることがわかりました。二重引用符で囲まれた整数値を文字列として送信する必要があります。

例えば:

{"PhoneNumber":9876543210}

また

{"PhoneNumber":"9876543210"}

動作しないでしょう。

しかし

{"PhoneNumber":"N_9876543210"}

動作します。

この問題の根本的な原因が正確に何であるかがわかり次第、更新します。知ってる人は早く更新してください。

編集:URLエンコーディングによって解決された問題。あなたのケースでも解決することを願っています。

于 2013-01-02T06:33:38.997 に答える