2010-04-15 10 views
8

Ho sempre usato cURL per questo genere di cose, ma this article mi ha fatto pensare che potrei richiedere un'altra pagina facilmente utilizzando l'oggetto Request in Kohana 3.Come eseguire una richiesta esterna in Kohana 3?

$url = 'http://www.example.com'; 

    $update = Request::factory($url); 

    $update->method = 'POST'; 

    $update->post = array(
     'key' => 'value' 
    ); 

    $update->execute(); 
    echo $update->response; 

Tuttavia ho l'errore

Accessing static property Request::$method as non static 

Da questo posso presumere che il metodo metodo sia statico, ma questo non mi aiuta molto. Ho anche copiato e incollato l'esempio di quell'articolo e ha generato lo stesso errore.

Fondamentalmente, sto provando a caricare su una nuova pagina su un server esterno, e farlo in modo Kohana.

Quindi, sto facendo correttamente, o dovrei semplicemente usare cURL (o file_get_contents() con contesto)?

risposta

10

Non so se questo è stato inizialmente scritto quando l'OP stava usando Kohana 3.0, ma la major release Kohana 3.1 ha reso questo molto più facile da fare. Remote :: get() è deprecato (e non era così buono per cominciare). Per fare questo in Kohana 3.1 è una cosa semplice, ed è praticamente avuto:

$url = 'http://www.example.com'; 

$request = Request::factory($url) 
    ->method('POST') 
    ->post('key', 'value'); 

$response = $request->execute(); 

echo $response->body(); 

ho spostato un po 'di roba in giro per sfruttare la concisione della sintassi concatenamento. Con la risposta, puoi anche controllare il codice di risposta. Per maggiori informazioni leggere le 3.1 documentazione API per Request e Request_Client_External (che gestisce questi cioè esterno non richieste entro-app.

+0

Grazie Jason :) – alex

+0

Secondo la documentazione Kohana http://kohanaframework.org/3.1/guide/api/Request#execute, $ request-> execute() restituisce un oggetto Request. Non c'è bisogno di chiamare $ request-> execute() -> response(); –

+0

In realtà, si _do_ necessario chiamare il 'risposta()' funzione - altrimenti sei ancora a che fare con l'oggetto Request. Sia la classe Request che la classe Response hanno un corpo che puoi leggere. Il 'body()' di una richiesta è esattamente questo - il corpo _request_. Per lo più questo significa che tutti i dati sotto forma che è venuto in, ecc non il comportamento che ci si vuole, e sarebbe certamente strano per tornare esattamente quello che hai inviato! – diurnalist

4

Basta leggere questo alla classe di

La richiesta di fondo utilizzato in questo esempio è attualmente disponibile come parte di un ramo di sviluppo Kohana core all'interno mio conto github personale, che può essere ottenuto da http://github.com/samsoir/core. Se utilizza il download ufficiale Koana PHP 3.0 , è richiesta un'estensione personalizzata della classe di richiesta .

Vedere anche this discussion.

-2

L'oggetto Richiesta viene utilizzato per richiedere le pagine all'interno dell'applicazione. Non è possibile utilizzarlo per URL esterni. Oh, e non c'è bisogno di usare curl, è possibile rendere più facile in questo modo:

$page = file_get_contents('http://google.com'); 
+0

devo creare un contesto flusso per il 'POST' Voglio inviare però. – alex

+0

Ho l' impressione che consentire url esterni tramite file_get_contents è un rischio per la sicurezza e una cattiva pratica –

+0

@mike: hai l'impressione sbagliata allora, supponendo che tu abbia un URL hardcoded (come nel mio esempio), non c'è assolutamente nulla di non sicuro a riguardo – ryeguy

Problemi correlati