Curl-запрос для WordPress становитсялегче и понятнее с функциями:
- wp_remote_request()
- wp_remote_get()
- wp_remote_post()
- wp_remote_head()
wp_remote_request() Создает любой тип HTTP запроса и возвращает ответ запроса в виде массива. GET - wp_remote_get() POST - wp_remote_post() HEAD - wp_remote_head()
Структура массива с данными ответа:
$res = array( 'headers' => array, 'response' => array( 'code' => int, 'message' => string ), 'body' => string, 'cookies' => array, 'filename' => string );
Использование:
wp_remote_request( $url, $args );
- $url(строка) (обязательный)УРЛ куда нужно отправить запрос и получить ответ.$args(массив)
Параметры запроса. Могут быть:
- body(строка/массив)
Тело запроса, которое нужно отправить с запросом.
Обычно тут указывается массив параметров запроса, где ключ это название параметра, а значение — это значение параметра, пр:array('foo'=>'val', 'bar'=>'val')
Заметка: Используется только при методах запросаPUT
,POST
.По умолчанию: null - method(строка)
HTTP метод запроса. Может быть:POST
,GET
,HEAD
,PUT
,DELETE
.
По умолчанию: ‘GET’ - timeout(число)
Максимальное время в секундах на получение данных. Время по умолчанию можно изменить через фильтрhttp_request_timeout
.
По умолчанию: 5 - redirection(число)
Сколько раз переходить по редиректам, если они есть. Значение можно изменить в плагине через фильтрhttp_request_redirection_count
.
По умолчанию: 5 - user-agent(строка)
User-agent устанавливаемый при запросе. По умолчаниюWordPress/4.0; https://www.example.com
, где 4.0 — текущая версия WP, а https://www.example.com — адрес вашего сайта. Значение можно изменить через фильтрhttp_headers_useragent
.
По умолчанию: ‘WordPress/’ . $wp_version . ‘; ‘ . get_bloginfo(‘url’) - blocking(логический)
Нужно ли ожидать ответа на запрос? Если установить в false, то запрос будет отправлен и php код немедленно продолжит работу, не дожидаясь ответа. Однако по ответу функции можно будет узнать удалось отправить запрос или нет, но невозможно будет узнать что ответил сервер, куда этот запрос был отправлен.Имейте ввиду, что не все серверы поддерживают эту функцию и при blocking=false может быть что блокировка все равно будет работать.
По умолчанию: true - headers(строка/массив)
Заголовки, которые нужно отправить с запросом.
По умолчанию: array() - cookies(массив)
Куки, которые нужно отправить с запросом.
По умолчанию: array() - compress(логический)
Позволяет отправлять тело запроса (body) в сжатом виде.
По умолчанию: false - decompress(логический)
по умолчанию true. Отвечает за параметр accept-encoding. Если установить в false, то в серверу в заголовках будет сказано, что принимаются сжатые данные и при получении сжатые данные тела (body) будут распакованы.
По умолчанию: true - sslverify(логический)
логический. true — будет проверять SSL сертификат (подпись, актуальность к сайту) и прервет запрос, если проверка не будет пройдена. Если вы запрашиваете https и знаете что проверка может быть не пройдена, но сайту можно доверять, то уберите проверку сертификата — поставьте в этом параметре false.
По умолчанию: true - sslcertificates(строка)
Абсолютный путь до файла SSL сертификата «.crt».
По умолчанию: ABSPATH . WPINC .’/certificates/ca-bundle.crt’ - stream(логический)
Нужно ли записывать данные в файл. Если установлено true и параметр filename не указан, то данные будут записываться в файл с названием basename(URL) во временную директорию WP.
По умолчанию: false - filename(строка)
Название файла (путь), куда нужно записывать поток, когда параметр stream выставлен в true.
По умолчанию: null - limit_response_size(число)
Размер в байтах, котором нужно ограничить ответ.
По умолчанию: null - reject_unsafe_urls(логический)
Очищать ли передаваемый URL через функцию wp_http_validate_url()
По умолчанию: false
Примеры
#1 Получим данные пользователя GitHub
GitHub предоставляет API давайте получим данные пользователя pomerla
$response = wp_remote_request( 'https://api.github.com/users/pomerla' );
print_r( $response );
/* выведет: данные о пользователе с
wp_remote_get()
Получает удаленную страницу используя HTTP GET метод. Обертка для использования curl. Результат содержит HTTP заголовки и данные самой станицы, и возвращается в виде массива.
Шаблон использования:
$remote_get = wp_remote_get( $url, array( 'timeout' => 5, 'redirection' => 5, 'httpversion' => '1.0', 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ), 'blocking' => true, 'headers' => array(), 'cookies' => array(), 'body' => null, 'compress' => false, 'decompress' => true, 'sslverify' => true, 'stream' => false, 'filename' => null ) );
Использование:
wp_remote_get( $url, $args );
- $url(cтрока) (обязательный)УРЛ страницы, которую нужно получить.$args(массив)
Аргументы запроса, в виде массива. Могут быть:
- timeout — время в секундах на получение данных. Время можно изменить в плагине, через фильтр http_request_timeout.
По умолчанию: 5 - redirection — число, сколько раз переходить по редиректам, если они есть.
Значение можно изменить в плагине через фильтр «http_request_redirection_count». - user-agent — позволяет установить user-agent. По умолчанию
"WordPress/4.0; https://www.example.com"
, где 4.0 — текущая версия WP, а https://www.example.com — адрес сайта. Значение можно изменить через фильтр http_headers_useragent. - blocking — позволяет выполнять не блокирующие запросы. По умолчанию true. Если установить в false, то это позволит PHP продолжать работу, пока запрос обрабатывается. Полезно это, когда вам нужно просто отправить запрос и не важно был ли он обработан и что он вернул. (имейте ввиду, что не все серверы поддерживают эту функцию и даже установив этот параметр в false, блокировка все равно будет. Альтернатива: установить timeout в 1 секунду, но делать это не рекомендуется, т.к. запрос может быть не послан вообще).
- compress — позволяет отправлять тело запроса (body) в сжатом виде.
- decompress — по умолчанию true. Отвечает за параметр accept-encoding. Если оставить в true, то серверу в заголовках будет сказано, что принимаются сжатые данные и при получении сжатые данные тела (body) будут распакованы. Если уставить в false, то серверу будет сказано что сжатые данные не принимаются.
- sslverify — логический. true — будет проверять SSL сертификат (подпись, актуальность к сайту) и прервет запрос, если проверка не будет пройдена. Если вы запрашиваете https и знаете что проверка может быть не пройдена, но сайту можно доверять, то уберите проверку сертификата — поставьте в этом параметре false.
- method — Для передачи HTTP метода (POST, GET, HEAD, PUT DELETE)
wp_remote_post()
Получает удаленную страницу используя HTTP POST метод. Результат содержит HTTP заголовки и данные самой станицы, и возвращается в виде массива. Обертка для использования curl.
В запрос можно передать данные cookies: передаются они как массив объектов WP_Http_Cookie.
Шаблон использования:
wp_remote_post( $url, array( 'timeout' => 5, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => null, // параметры запроса в массиве 'cookies' => array() ) );
Использование:
wp_remote_post( $url, $args );
- $url(строка) (обязательный)URL запроса.$args(массив)
Аргументы запроса, в виде массива. Могут быть:
- body — массив параметров запроса, где ключ это название параметра и значение это значение параметра:
array('foo'=>'val', 'bar'=>'val')
- timeout — время в секундах на получение данных. Время можно изменить в плагине через фильтр «http_request_timeout«.
По умолчанию: 5 - redirection — число, сколько раз переходить по редиректам, если они есть.
Значение можно изменить в плагине через фильтр «http_request_redirection_count».
По умолчанию: 5 - user-agent — позволяет установить user-agent. По умолчанию
WordPress/4.0; https://www.example.com
, где 4.0 — текущая версия WP, а https://www.example.com — адрес сайта. Значение можно изменить через фильтр http_headers_useragent.
По умолчанию: ‘WordPress/’ . $wp_version . ‘; ‘ . get_bloginfo(‘url’) - blocking — позволяет выполнять не блокирующие запросы. По умолчанию true. Если установить в false, то это позволит PHP продолжать работу, пока запрос обрабатывается. Полезно это, когда вам нужно просто отправить запрос и не важно был ли он обработан и что он вернул. (имейте ввиду, что не все серверы поддерживают эту функцию и даже установив этот параметр в false, блокировка все равно будет. Альтернатива: установить timeout в 1 секунду, но делать это не рекомендуется, т.к. запрос может быть не послан вообще).
По умолчанию: true - compress — позволяет отправлять тело запроса (body) в сжатом виде.
По умолчанию: true - decompress — по умолчанию true. Отвечает за параметр accept-encoding. Если установить в false, то в серверу в заголовках будет сказано, что принимаются сжатые данные и при получении сжатые данные тела (body) будут распакованы.
По умолчанию: true - sslverify — логический. true — будет проверять SSL сертификат (подпись, актуальность к сайту) и прервет запрос, если проверка не будет пройдена. Если вы запрашиваете https и знаете что проверка может быть не пройдена, но сайту можно доверять, то уберите проверку сертификата — поставьте в этом параметре false.
Примеры
#1 Отправит post данные на удаленный УРЛ
Допустим нам нужно отправить запрос на УРЛ https://example.com/profile. POST данные нужно отправлять в параметре body:
$url = 'https://example.com/profile'; $args = array( 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => array( 'username' => 'bob', 'password' => '1234xyz' ), 'cookies' => array() ); $response = wp_remote_post( $url, $args ); // проверка ошибки if ( is_wp_error( $response ) ) { $error_message = $response->get_error_message(); echo "Что-то пошло не так: $error_message"; } else { echo 'Ответ: <pre>'; print_r( $response ); echo '</pre>'; }