Я пытаюсь отправить строку, как "@mystr"
с PHP с использованием CURL
метода POST, но если когда я просто отправить с помощью следующего кода:
$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(): использование API @filename для загрузки файлов устарело. Вместо этого используйте класс CURLFile...
Примечание: поля $ выглядят примерно так:
$fields=['chat_id'=>'@someusername','text'=>'hello'];
Это для телеграммы бота api, если я использую %40
вместо @
в методе GET, это будет нормально, и телеграмма отправит мое сообщение на мой канал, но я должен использовать метод 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);