web-dev-qa-db-ja.com

このcURL呼び出しのリクエスト本文に不正なJSONが含まれるのはなぜですか?

独自のドキュメントで提供されている例を使用して、CloudFlare API v4を呼び出そうとしています。

これは例のコードです

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \ -H "X-Auth-Email: [email protected]" \ -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ -H "Content-Type: application/json" \ --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'

pdate DNS Records にもあります

Windowsのcmd.exeを使用してこのコマンドを実行するには、最初に1行にする必要があるため、「\」を削除して再フォーマットし(2回)、プロセスのどの部分も変更しないようにします。

これは、1行の同じコードです。

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" -H "X-Auth-Email: [email protected]" -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" -H "Content-Type: application/json" --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'

このシングルライナーをcmdで実行すると機能しますが、リクエスト本文に不正な形式のJSONが表示されますが、視覚的なチェック、notepad ++でのフォーマット、JSONバリデーターの実行はすべて正です。このJSON(CloudFlareドキュメントからコピー) )は不正な形式ではありません。

エラーメッセージ

{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}

このエラーメッセージまたはエラーコードをグーグルしても何も得られず、この同じコマンドが上司のLinuxを実行しているPCで機能します。

これが既知のバグなのか、JSONが実際に不正な形式なのか、何か他のことが思い浮かぶのか、誰か教えてもらえますか?

ありがとうございました

10
Frank.Lowell

フランク・ローウェル、質問ありがとうございます!

私はブログの投稿で答えを見つけました: "有効なJSONがリクエスト本文で見つかります..." curl for Windows

たとえば、 Purge everything--data値は次のとおりです。

# On Linux
--data '{"purge_everything":true}'

# On Windows
--data "{\"purge_everything\":true}"

Windowsの場合:

  1. 一重引用符を二重引用符に置き換えます:'-->"
  2. 二重引用符をバックスラッシュでエスケープします:"-->\"
18
Veaceslav Doina