Curlopt useragent: PHP cURL how to add the User Agent value OR overcome the Servers blocking cURL requests?

PHP: rfc:curl_user_agent

  • Версия: 1.0

  • Дата: 25.06.2021

  • Автор: Михаил Марошек ([email protected])

  • Предлагаемая версия: PHP 8.2

  • Статус: Обсуждается

  • Впервые опубликовано на: http://wiki.php.net/rfc/curl_user_agent

Введение

PHP имеет запись user_agent php.ini для десятилетий, которую можно установить как значение по умолчанию. Но это считается для операций на основе потока, таких как file_get_contents. это RFC предлагает новую запись curl.user_agent php.ini, которая позволит установить user_agent по умолчанию для всех запросов cURL. Это улучшит согласованность установки user_agent по умолчанию. Эта функция в основном будет использоваться в контексте SAPI в моем случае использования, который я проиллюстрирую позже.

Предложение

Добавьте новую запись php.ini для cURL с именем curl. user_agent, которая установит HTTP-заголовок User-Agent по умолчанию для всех запросов, связанных с cURL. Конечно, любой может переопределить значение по умолчанию, используя curl_setopt.

Альтернативным подходом было бы повторное использование существующей (глобальной) настройки ini user_agent также для cURL, но это затронет обратную совместимость, что неблагоприятно.

Обратная несовместимость изменений

Никто

Предлагаемые версии PHP

8.1

Влияние RFC

В SAPI

Эта функция особенно полезна для использования SAPI, поскольку она позволяет использовать заголовок по умолчанию для всех HTTP-запросов (независимо от того, основаны ли они на потоке или на основе cURL), что позволит удаленной стороне обнаружить приложение. На данный момент вам нужен рабочий процесс или оболочка, которая обеспечит установку User-Agent для всех потоков и запросов cURL. В нашем случае пользователю также разрешено самостоятельно создавать PHP-скрипты. В этой ситуации пользователь, скорее всего, вообще не будет устанавливать User-Agent, а будет полагаться на значения по умолчанию.

На существующие внутренние номера

Без влияния. По умолчанию новая запись пуста и ничего не делает.

В Opcache

Без влияния.

Новые константы

Нет

php.ini по умолчанию

curl.user_agent по умолчанию отключен для разработки и производства.

Открытые вопросы

Обсуждение, должна ли видимость ini быть PHP_INI_ALL или PHP_INI_SYSTEM
https://github.com/php/php-src/pull/6834/files#r628774432

Функциональность PHP не затронута

Эта функция не очень сильно влияет на PHP и не противоречит ни одному из предлагаемых в настоящее время RFC.

Прицел будущего

Этот RFC не имеет области применения в будущем.

Предлагаемые варианты голосования

На данный момент опция php.ini предлагается внутри раздела curl. Если обсуждение не должно завершиться единогласно, мы должны рассмотреть возможность добавления опции голосования, если раздел curl или глобальный раздел должен быть нацелен на запись user_agent.

Исправления и тесты

Тесты включены в следующий PR.

Реализация

https://github.com/php/php-src/pull/6834

Каталожные номера

https://www.mail-archive.com/[email protected]/msg106186.html

Отклоненные функции

Еще нет

CURLOPT (агент пользователя) завершается с ошибкой с набором, для которого требуется ‘=’, чтобы быть допустимым назначением


[Дата Предыдущая][Дата Следующая][Предыдущая Тема][Следующая Тема][Указатель Даты][Указатель Темы]

 


  • Тема : Re: CURLOPT(useragent) завершается с ошибкой с помощью Set требуется ‘=’, чтобы быть допустимым назначением
  • От : Джонатан Х.
  • Дата : Пн, 14 декабря 2020 г. 18:50:19 +0000
  • В ответ на :
  • Ссылки :

 Спасибо.
Да, строка агента пользователя действительно содержит точку с запятой, и, как большинство
кажется, как я могу установить (useragent) действительный useragent?
И значит ли это, что я никогда не смогу УСТАНОВИТЬ что-то с точкой с запятой в
строка, даже если она заключена в кавычки?
Извините, если я здесь туплю!
Спасибо
В понедельник, 14 декабря 2020 г., в 18:34, Ричард Маджетт  написал:
> 
>  В строке агента пользователя, которую вы пытаетесь установить, есть точки с запятой. Если это точная строка диалплана, то 
>  эти точки с запятой воспринимаются как начало комментария. 
> 
>  Ричард 
> 
>  В понедельник, 14 декабря 2020 г. , в 12:25 Джонатан Х  написал: 
>  > 
>  > Все другие мои настройки CURLOPT, такие как тайм-аут, работают нормально. Но это: 
>  > 
>  > то же самое => n,Set(CURLOPT(useragent)="Mozilla/5.0 (Windows NT 10.0; 
>  > Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/88.0.4324.41 
>  > Сафари/537,36") 
>  > 
>  > выдать следующее предупреждение при перезагрузке диалплана с кавычками и без них 
>  > вокруг пользовательского агента. Все остальное в порядке - возможно, это .
>  > круглые скобки в пользовательском агенте? 
>  > Если да, то как мне это обойти? Я почти уверен, что это опечатка в моем 
>  > конец, но я просмотрел примеры других людей/сущностей и мое использование 
>  > выглядит правильно. 
>  > Это только опция агента пользователя, которой он задыхается. 
>  > 
>  > -- Выполнение [s@setup:3] Set("Local/s@setup-00000006;2", 
>  > "CURLOPT(useragent") в новом стеке 
>  > [14 декабря 17:24:30] ПРЕДУПРЕЖДЕНИЕ[10243][C-00000007]: pbx_variables. c:1140 
>  > pbx_builtin_setvar: Set требует, чтобы «=» было допустимым назначением. 
>  > -- Выполнение [s@setup:4] Set("Local/s@setup-00000006;2", 
>  > "CURLOPT(conntimeout)=3") в новом стеке 
>  > -- Выполнение [s@setup:5] Set("Local/s@setup-00000006;2", 
>  > "CURLOPT(dnstimeout)=3") в новом стеке 
>  > 
>  > 
>  > ПРИМЕЧАНИЕ. Я делаю это потому, что хочу, чтобы Asterisk выдавал 
>  > другой пользовательский агент для функции ControlPlayback и быстро двигаться дальше 
>  > если удаленный файл недоступен/медленно. 
>  > Если это не так, дайте мне знать! 
>  > 
>  > -- 
>  > _____________________________________________________________________ 
>  > -- Пропускная способность и размещение Предоставлено http://www.api-digital.com -- 
>  > 
>  > Посетите новый форум сообщества Asterisk по адресу: https://community.asterisk.org/ 
>  > 
>  > Впервые в Asterisk? Начните здесь: 
>  > https://wiki. asterisk.org/wiki/display/AST/Getting+Started 
>  > 
>  > список рассылки пользователей звездочки 
>  > Чтобы ОТПИСАТЬСЯ или обновить параметры, посетите: 
>  > http://lists.digium.com/mailman/listinfo/asterisk-users 
> 
>  -- 
>  ____________________________________________________________________________ 
>  -- Пропускная способность и совместное размещение Предоставлено http://www.api-digital.com -- 
> 
>  Посетите новый форум сообщества Asterisk по адресу: https://community.asterisk.org/ 
> 
>  Новичок в Asterisk? Начните здесь: 
>  https://wiki.asterisk.org/wiki/display/AST/Getting+Started 
> 
>  список рассылки пользователей звездочки 
>  Чтобы ОТМЕНИТЬ ПОДПИСКУ или обновить параметры, посетите: 
>  http://lists.digium.com/mailman/listinfo/asterisk-users 
--
_____________________________________________________________________
-- Пропускная способность и размещение Предоставлено http://www. api-digital.com --
Посетите новый форум сообщества Asterisk по адресу: https://community.asterisk.org/
Новичок в Астериске? Начните здесь:
      https://wiki.asterisk.org/wiki/display/AST/Getting+Started
список рассылки пользователей asterisk
Чтобы ОТМЕНИТЬ ПОДПИСКУ или обновить параметры, посетите:
   http://lists.digium.com/mailman/listinfo/asterisk-users
 

  • Последующие действия :
    • Re: CURLOPT(useragent) завершается ошибкой с Set требует ‘=’, чтобы быть допустимым назначением
      • От кого: Джошуа К. Колп
  • Каталожные номера :
    • CURLOPT (useragent) завершается ошибкой с Set требует, чтобы «=» было допустимым назначением
      • От кого: Джонатан Х
    • Re: CURLOPT(useragent) завершается ошибкой с Set требует, чтобы ‘=’ было допустимым назначением
      • От кого: Ричард Маджетт
  • Предыдущий по дате:
    Re: CURLOPT(useragent) завершается ошибкой с Set требует, чтобы ‘=’ было допустимым назначением
  • Далее по дате:
    Fwd: ошибка синтаксического анализа сертификата Asterisk 16.