POSTデータをURLエンコードする必要がありますか? 質問する

POSTデータをURLエンコードする必要がありますか? 質問する

外部 API にデータを POST しています (関連する場合は PHP を使用)。

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

それとも、GET データのみを URL エンコードする必要がありますか?


更新: 関連する場合に備えて、これが私の 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);

ベストアンサー1

一般的な回答

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

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

この回答にはより詳しい説明がありますさらに詳しい情報をご希望の場合は。


具体的な回答

使用しているPHPライブラリ(CURL)に固有の回答については、ドキュメントはこちらで読む

関連情報は次のとおりです:

構文

通常の HTTP POST を実行する場合は TRUE にします。この POST は通常の application/x-www-form-urlencoded 形式であり、HTML フォームで最もよく使用されます。

CURLOPT_POSTフィールド

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

おすすめ記事