0

投稿先の API が API の最終リリースを公開した後、REST POST リクエストで問題が発生しました。問題なく動作しており、新しいバージョンでは、タイプが「application/json」であるという点でサーバーがより厳密になっていると言われています。次の cli curl コマンドは問題なく動作します。

cat json.txt|curl -v -k -u user:password -F 'exchangeInstance=@-;type=application/json'  https://my.url.here

ただし、これをコードで実行する必要があります。php curl ライブラリを使用して、次のような簡単なテスト スクリプトを作成しました。

  $post = array(
    "exchangeInstance" => $json_string,
    "type" => "application/json",
  );
  $url = 'myurlhere';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

  $result = curl_exec($ch);
  $info = curl_getinfo($ch);

  var_dump($post);
  var_dump($result);
  echo $result;
  var_dump($info);

ドキュメントを読むと、CURLOPT_POSTFIELDS として配列を渡すと、ヘッダーの Content-type が自動的に「multipart/form」に設定され、要素パスのタイプが「application/json」に設定されます。配列。

ただし、API には私からの POST リクエストはありません。そして、GET リクエストを受け取っていることを明確に示すエラーが表示されます。これはどうしてでしょうか?私は何が欠けていますか?

4

1 に答える 1

1

カール-F!==-d

$post = array(
    "exchangeInstance" => sprintf('@%s;type=application/json', $json_string),   
);
于 2013-02-21T19:48:21.970 に答える