发送字符串以" @"开头在php curl中作为字符串

时间:2015-11-16 19:27:20

标签: php curl telegram-bot

我尝试使用"@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中使用@发送字符串吗?

1 个答案:

答案 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);