Использование wp_remote_get вместо file_get_contents

27 сент. 2013 г., 12:35:22
Просмотры: 34.9K
Голосов: 11

При проверке моей темы через плагин Theme checker он выдает предупреждение о использовании file_get_contents для получения JSON URL. Я нашел посты, где рекомендуют использовать wp_remote_get. Сейчас я декодирую URL следующим образом:

$url = 'url' . $var;
$json =   file_get_contents($url,0,null,null);
$output = json_decode($json,true); 

Сообщение, которое я получаю от Theme Checker:

WARNING: file_get_contents was found in the file.php possible file operations.

Выдается ли это предупреждение только потому, что есть функция WordPress, которую я мог бы использовать, или есть другие причины? Также, как правильно использовать wp_remote_get? Я пробовал несколько вариантов, в основном просто заменяя file_get_contents на wp_remote_get, но безуспешно. URL вообще не декодируется.

5
Комментарии

Этот вопрос/ответ может вам помочь

cybmeta cybmeta
27 сент. 2013 г. 12:45:12

привет, спасибо за это, помогло, так что я предположил, что wp-Remote уже выполнил все декодирование за меня? Так что я сделал $url = 'url' . $var; $output = wp_remote_get( $url ); но это не сработало

David David
27 сент. 2013 г. 13:01:17

Вам нужно снова прочитать ссылку, которую я опубликовал. Если вы делаете $output = wp_remote_get( $url );, то $output будет массивом, где вы можете получить доступ к $output['headers'], $output['body']. Я думаю, что вам нужно $json = json_decode($output['body']);

cybmeta cybmeta
27 сент. 2013 г. 13:05:01

Не используйте json_decode($output['body'], вместо этого используйте wp_remote_retrieve_body( $output )

Horttcore Horttcore
27 сент. 2013 г. 13:10:44

Несмотря на то что вопрос помечен как дубликат, он сформулирован гораздо лучше и рассматривает конкретную проблему - как начать использовать wp_remote_get вместо file_get_contents или file_get_contents_curl. Благодаря более четкой формулировке вопроса, ответы на него получились лучше и понятнее.

squarecandy squarecandy
26 авг. 2020 г. 21:27:03
Все ответы на вопрос 3
0
11

Если вам нужно отправить JSON-ответ, для этого есть набор функций. В случае, если это необходимо для AJAX-обратного вызова:

В итоге это будет выглядеть примерно так:

$request  = wp_remote_get( 'http://example.com' );
$response = wp_remote_retrieve_body( $request );
if ( 
    'OK' !== wp_remote_retrieve_response_message( $response )
    OR 200 !== wp_remote_retrieve_response_code( $response )
)
    wp_send_json_error( $response );

wp_send_json_success( $response );

Обе функции wp_send_json_success/_error() являются обёртками для wp_send_json(), которая включает wp_die() в конце. Так что больше ничего делать не нужно.

Имейте в виду, что 99% удалённых API отправляют 200/OK даже в случае ошибок. Вам всё равно придётся вручную проверять результат и искать ошибки.

27 сент. 2013 г. 22:11:01
3

Используйте wp_remote_get() в сочетании с wp_remote_retrieve_body()

Пример

<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>

Проверьте документацию для возможных аргументов

27 сент. 2013 г. 13:25:47
Комментарии

Привет, спасибо, похоже, я могу вывести весь JSON, но когда я пытаюсь получить только определенные значения из файла, например $response['companyname'], я получаю просто '{'

David David
3 окт. 2013 г. 14:03:59

Если тело документа тоже является JSON-файлом, то используй json_encode()

Horttcore Horttcore
8 окт. 2013 г. 16:07:15

wp_remote_retrieve_body хороша тем, что проверяет отсутствие ошибок и возвращает пустую строку, если $request['body'] не установлен.

squarecandy squarecandy
26 авг. 2020 г. 21:31:46
0

Вы можете использовать wp_remote_get() следующим образом:

$url = 'url' . $var;
$request =   wp_remote_get($url);
// Получаем тело ответа
$response = wp_remote_retrieve_body( $request );
// Декодируем json
$output = json_decode( $response ); 

$output теперь содержит то, что вам нужно, и вы можете продолжать работу.

Также существует серия обучающих материалов по wp_remote_get(). Ознакомьтесь с ними — это определенно поможет.

Ссылка -- Обучающее руководство

Надеюсь, это поможет.

27 сент. 2013 г. 14:45:07