我正在尝试制作一个cURL帖子,其中一个参数包含一个前缀为“@”符号的字符串。通常对于cURL帖子,'@'表示我正在尝试发布文件,但在这种情况下,我只想传递前缀为'@'的字符串。有没有办法,或者最好的办法是什么?
这是我的params数组:
$params = array(
'UserID' => $this->username,
'Password' => $this->password,
'Type' => $type,
'Symbol' => $symbol, // this will look something like @CH14
'Market' => '',
'Vendor' => '',
'Format' => 'JSN'
);
以下是我的cURL帖子的发布方式(网址与实际问题无关。):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
if($response === FALSE)
{
$error = curl_error($ch);
$error_code = curl_errno($ch);
throw new Exception("CURL ERROR: #$error_code\n$error\n");
}
curl_close($ch);
return $response;
这适用于我需要它做的一切,除非我需要在前面传递一个带有'@'的符号。任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
<强> CURLOPT_POSTFIELDS 强>
要在HTTP“POST”操作中发布的完整数据。要发布文件,请在文件前加上@并使用完整路径。可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型。此参数可以作为urlencoded字符串传递,如'para1 = val1&amp; para2 = val2&amp; ...',或者作为一个数组,字段名称为键,字段数据为值。如果value是数组,则Content-Type标头将设置为multipart / form-data。 从PHP 5.2.0开始,如果使用@前缀将文件传递给此选项,则值必须是数组。从PHP 5.5.0开始,不推荐使用@前缀,并且可以使用CURLFile发送文件
因此,我们可以使用http_build_query()
简单地将其转换为字符串:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
答案 1 :(得分:1)
使用http_build_query()
构建查询字符串。
从功能文档:
从提供的关联(或索引)数组生成 URL编码的查询字符串。
如上所述,它将根据需要正确编码所有特殊字符。它可以使用如下:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));