我试图使用"@mystr" POST方法发送类似于CURL的php字符串,但如果我只使用以下代码发送:
$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上传文件。请使用CURLFile类代替..。
注意: $fields是这样的:
$fields=['chat_id'=>'@someusername','text'=>'hello'];它是用于电报bot api的,如果在GET方法中使用%40而不是@,就可以了,电报将把我的消息发送到我的频道,但我必须使用POST方法。
@ in CURL ?中的字符串是以开头的。
发布于 2015-11-16 20:11:04
我在这里找到了解决方案:http://php.net/manual/en/function.curl-setopt.php
CURLOPT_SAFE_UPLOAD
若要禁用对CURLOPT_POSTFIELDS中上载文件的@前缀的支持,这意味着以@开头的值可以安全地作为字段传递。CURLFile可能被用于上传。
在PHP5.5.0中添加了FALSE作为默认值。PHP5.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);https://stackoverflow.com/questions/33743062
复制相似问题