1. ホーム
  2. http

[解決済み] POSTデータはURLエンコードした方が良いですか?

2022-07-12 10:01:18

質問

私は外部APIにデータをPOSTしています(関連性があればPHPを使用)。

渡すPOST変数をURLエンコードする必要がありますか?

それとも、GETデータだけをURLエンコードすればよいのですか?


UPDATE: これは私のPHPです。

$fields = array(
    'mediaupload'=>$file_field,
    'username'=>urlencode($_POST["username"]),
    'password'=>urlencode($_POST["password"]),
    'latitude'=>urlencode($_POST["latitude"]),
    'longitude'=>urlencode($_POST["longitude"]),
    'datetime'=>urlencode($_POST["datetime"]),
    'category'=>urlencode($_POST["category"]),
    'metacategory'=>urlencode($_POST["metacategory"]),
    'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);

どのように解決するのですか?

一般的な回答

あなたの質問に対する一般的な答えは、「場合による」ということです。 そして、HTTPヘッダで"Content-Type"が何であるかを指定することによって決定することになります。

application/x-www-form-urlencoded" の値は、POST 本文が GET パラメータ文字列と同様に URL エンコードされる必要があることを意味します。 multipart/form-data" の値は、コンテンツの区切り文字を使用し、コンテンツを URL でエンコードしないことを意味します。

この回答には、より詳細な説明があります。 をご覧ください。


具体的な回答

使用している PHP ライブラリ (CURL) に固有の回答は、次のとおりです。 ここでドキュメントを読んでください .

関連情報はこちらです。

<ブロッククオート

CURLOPT_POST

TRUE を指定すると、通常の HTTP POST を行います。 このPOSTは通常のapplication/x-www-form-urlencodedの種類で、HTMLフォームで最もよく使われるものです。

curlopt_postfields

HTTP "POST"操作でポストする完全なデータです。ファイルを投稿するには、ファイル名の前に @ を付け、フルパスを使用します。ファイル名の後に ';type=mimetype' という形式でファイルタイプを指定することもできます。このパラメータは、'para1=val1&para2=val2&...'のようなURLエンコードされた文字列として渡すか、フィールド名をキー、フィールドデータを値とする配列として渡すことができます。value が配列の場合、Content-Type ヘッダは multipart/form-data に設定されます。PHP 5.2.0 以降、このオプションに @ というプレフィックスをつけてファイルを渡す場合、 value は配列でなければなりません。