在 php 中发送以“@”开头的字符串 curl as string

Send string starts with "@" in php curl as string

我正在尝试使用 CURL POST 方法发送 "@mystr" 和 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);

它会抛出一个错误:

Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead...

注意:$字段是这样的:

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

它用于电报机器人 api,如果我在 GET 方法中使用 %40 而不是 @ 就可以了,电报会将我的消息发送到我的频道,但我有使用 POST 方法。

在 CURL 中是否可以发送以 @ 开头的字符串?

我在这里找到了解决方案: 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);