我尝试使用"@mystr"
POST方法使用php发送类似CURL
的字符串,但是如果我只发送以下代码:
$url_str = $url->getUrl();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_str);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
curl_close($ch);
它会抛出一个错误:
不推荐使用:curl_setopt():不建议使用@filename API进行文件上传。请改用CURLFile类......
注意: $字段是这样的:
$fields=['chat_id'=>'@someusername','text'=>'hello'];
对于电报bot api,如果我在GET方法中使用%40
而不是@
它就可以了,电报会将我的信息发送到我的频道,但我必须使用POST方法。
无论如何都要在CURL中使用@
发送字符串吗?
答案 0 :(得分:3)
我在这里找到了解决方案: http://php.net/manual/en/function.curl-setopt.php
CURLOPT_SAFE_UPLOAD
TRUE禁用对CURLOPT_POSTFIELDS中上传文件的@前缀的支持,这意味着以@开头的值可以安全地作为字段传递。 CURLFile可以用于上传。
在PHP 5.5.0中添加了FALSE作为默认值。 PHP 5.6.0将默认值更改为TRUE。
$url_str = $url->getUrl();
$ch = curl_init();
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, TRUE); //<- HERE
curl_setopt($ch, CURLOPT_URL, $url_str);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
curl_close($ch);