我正在将数据发布到外部 API(使用 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);
一般回答
您的问题的一般答案是,这取决于情况。您可以通过在 HTTP 标头中指定“Content-Type”来决定。
值“application/x-www-form-urlencoded”意味着您的 POST 正文需要像 GET 参数字符串一样进行 URL 编码。 “multipart/form-data”值意味着您将使用内容分隔符而不是对内容进行 url 编码。
这个答案有更彻底的解释如果您想了解更多信息。
具体答复
对于特定于您正在使用的 PHP 库 (CURL) 的答案,您应该阅读此处的文档.
以下是相关信息:
卷曲_POST
TRUE 表示执行常规 HTTP POST。
此 POST 是普通的 application/x-www-form-urlencoded 类型,最常用于 HTML 表单。
CURLOPT_POSTFIELDS
要在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前面添加 @ 并使用完整路径。可以通过在文件名后面加上格式为“;type=mimetype”的类型来显式指定文件类型。此参数可以作为 urlencoded 字符串(如“para1=val1¶2=val2&...”)传递,也可以作为以字段名称作为键、字段数据作为值的数组传递。如果 value 是数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件使用 @ 前缀传递给此选项,则值必须是数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)