Я пытаюсь отправить строку типа "@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 выглядят примерно так:
$fields=['chat_id'=>'@someusername','text'=>'hello'];
Это для бота телеграммы API, если я использую %40
вместо @
в методе GET, все будет в порядке, и телеграмма отправит мое сообщение на мой канал, но я должен использовать метод POST.
Можно ли в CURL отправлять строки, начинающиеся с @
?
@
в параметре GET или строке URI противоречит стандартам RFC, если только оно не используется для обозначения информации перед путем к ресурсу, например, в URIftp://user:[email protected]/folder
. Публикация — это отдельная история, но я просто хотел объяснить, почему вы были вынуждены использовать%40
в GET. Этот вопрос является дубликатом другого, но не того, который пометил Ян. Одна секунда на правильном флаге дублирования.... - person skrilled   schedule 16.11.2015@
в начале значения ЛЮБОГО поля — это ярлык curl, обозначающий загрузку файла. если вы хотите, чтобы@
НЕ рассматривалось как загрузка файла, вы должны закодировать его в URL-адресе. - person Marc B   schedule 16.11.2015