Отправка строки начинается с «@» в php curl как строка

1

Я пытаюсь отправить строку, как "@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?

  • 0
    Возможный дубликат stackoverflow.com/questions/10060093/…
  • 2
    @Jan Ян, нет, это не так, это не то, что CURL, это класс PHP curl
Показать ещё 5 комментариев
Теги:
curl
telegram-bot

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню