发送字符串以“开始”@&引用;在php中,卷曲为字符串
我正在尝试使用php使用发送字符串以“开始”@&引用;在php中,卷曲为字符串,php,curl,telegram-bot,Php,Curl,Telegram Bot,我正在尝试使用php使用CURLPOST方法发送一个字符串,如“@mystr”,但如果我只是使用以下代码发送: $url_str = $url->getUrl(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url_str); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch,
CURL
POST方法发送一个字符串,如“@mystr”
,但如果我只是使用以下代码发送:
$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'];
这是用于电报机器人api的,如果我在GET方法中使用%40
而不是@
,它将是正常的,电报将把我的消息发送到我的频道,但我必须使用POST方法
是否仍然可以发送以CURL中的
@
开头的字符串?我在这里找到了解决方案:
CURLOPT\u SAFE\u上传
如果为TRUE,则禁用对用于在CURLOPT_POSTFIELDS中上载文件的@前缀的支持,这意味着以@开头的值可以安全地作为字段传递。卷曲文件可以用于上传
在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);
$url\u str=$url->getUrl();
$ch=curl_init();
curl_setopt($ch,CURLOPT_SAFE_UPLOAD,TRUE)//@Jan no it's not,this not the CURL this is PHP CURL classist在GET参数或URI字符串中使用@
是违反RFC标准的,除非它用于表示资源路径之前的信息,例如URIftp://user:pass@ftp.domain.com/folder
。发帖是另一回事,但只是想解释一下为什么在GET中必须使用%40
。这个问题是另一个问题的重复,而不是Jan提出的问题。在正确的复制标志上等待一秒钟。@Omid:php curl的可能复制只是命令行curl使用的完全相同的库的包装。行为本质上是相同的@
在任何字段值的开头都有一个表示文件上载的curl快捷方式。如果您不想将该@
视为文件上载,则必须对其进行url编码。