2

我正在尝试"@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 是这样的:

$fields=['chat_id'=>'@someusername','text'=>'hello'];

它用于电报机器人 api,如果我使用%40而不是@GET 方法,它会没问题,电报会将我的消息发送到我的频道,但我必须使用 POST 方法。

无论如何要发送@以 CURL 开头的字符串吗?

4

1 回答 1

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);
于 2015-11-16T20:11:04.013 回答