Folosirea wp_remote_get în loc de file_get_contents

27 sept. 2013, 12:35:22
Vizualizări: 34.9K
Voturi: 11

Am rulat tema mea prin plugin-ul Theme Checker și pare să fie nemulțumit de utilizarea file_get_contents pentru a prelua un URL JSON. Am găsit postări care spun că ar trebui să folosesc wp_remote_get. În prezent, decodez URL-ul în felul următor:

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

Mesajul pe care îl primesc de la Theme Checker este:

WARNING: file_get_contents a fost găsit în file.php posibile operațiuni cu fișiere.

Îmi arată acest avertisment doar pentru că există o funcție pe care aș putea să o folosesc din WordPress sau există și alte motive? De asemenea, cum aș putea folosi wp_remote_get. Am încercat câteva variante, în principal înlocuind file_get_contents cu wp_remote_get fără succes. Nu pare să decodeze URL-ul deloc.

5
Comentarii

Această întrebare/răspuns te poate ajuta

cybmeta cybmeta
27 sept. 2013 12:45:12

salut, mulțumesc pentru asta, a ajutat, deci am înțeles că wp-Remote face deja toată decodarea pentru mine? Am făcut $url = 'url' . $var; $output = wp_remote_get( $url ); dar nu a funcționat

David David
27 sept. 2013 13:01:17

Trebuie să citești din nou link-ul pe care l-am postat. Dacă faci $output = wp_remote_get( $url );, variabila $output va fi un array unde poți accesa $output['headers'], $output['body']. Cred că ceea ce vrei este $json = json_decode($output['body']);

cybmeta cybmeta
27 sept. 2013 13:05:01

Nu folosiți json_decode($output['body'] ci în schimb utilizați wp_remote_retrieve_body( $output )

Horttcore Horttcore
27 sept. 2013 13:10:44

Deși a fost închisă ca duplicat, această întrebare este mult mai bine formulată și abordează problema specifică a modului de a începe să utilizați wp_remote_get în loc de file_get_contents sau file_get_contents_curl - și pentru că întrebarea este mai clară, răspunsurile sunt mai bune și mai ușor de înțeles.

squarecandy squarecandy
26 aug. 2020 21:27:03
Toate răspunsurile la întrebare 3
0
11

Dacă trebuie să trimiți un răspuns JSON, există un set de funcții pentru asta. În cazul în care ai nevoie de acest lucru pentru un callback AJAX:

În final, ar arăta cam așa:

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

Ambele funcții wp_send_json_success/_error() sunt wrapper-e pentru wp_send_json(), care include wp_die() la final. Deci nu mai este nevoie de altceva.

Ține minte că 99% dintre API-urile externe trimit 200/OK chiar și în caz de erori. Va trebui totuși să inspectezi manual rezultatul și să verifici erorile.

27 sept. 2013 22:11:01
3

Folosește wp_remote_get() în conjuncție cu wp_remote_retrieve_body()

Exemplu

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

Verifică documentația pentru argumentele posibile

27 sept. 2013 13:25:47
Comentarii

Bună, mulțumesc, se pare că pot afișa întregul conținut, dar când încerc să obțin doar anumite valori din fișierul json, de exemplu $response['companyname'], primesc doar '{'

David David
3 oct. 2013 14:03:59

Dacă corpul unui document este și el un fișier json, atunci folosește json_encode()

Horttcore Horttcore
8 oct. 2013 16:07:15

wp_remote_retrieve_body este util pentru că verifică să nu fie erori și returnează un șir gol dacă $request['body'] nu este setat.

squarecandy squarecandy
26 aug. 2020 21:31:46
0

Puteți folosi wp_remote_get() în următorul mod:

$url = 'url' . $var;
$request =   wp_remote_get($url);
// Obține corpul răspunsului
$response = wp_remote_retrieve_body( $request );
// Decodifică json-ul
$output = json_decode( $response ); 

$output conține acum ceea ce doriți și puteți continua să faceți ceea ce aveți nevoie.

Există și o serie de tutoriale despre wp_remote_get(). Parcurgeți-le, vă vor fi cu siguranță de folos.

Link -- Tutorial

Sper că vă este de ajutor.

27 sept. 2013 14:45:07