2010-01-28 13 views
15

Non vedo mai come viene inviata la richiesta PUT/DELETE.Come avviare una richiesta GET/POST/PUT/DELETE e giudicare il tipo di richiesta in PHP?

Come farlo in PHP?

so come inviare una richiesta/POST GET con l'arricciatura:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_POST, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 4); 

Ma come fare PUT/DELETE richiesta?

+0

Per ottenere una richiesta PUT, non puoi fare $ _PUT [ 'var'], ma: 'parse_str (file_get_contents ('php: // input'), $ put_vars);' – Strae

+0

'$ _PUT' fallirà, ma' php: // input' funziona. – user198729

risposta

46

Per DELETE uso curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
Per PUT uso curl_setopt($ch, CURLOPT_PUT, true);

Un'alternativa che non si basa su cURL installato sarebbe usare file_get_contents con un custom HTTP stream context.

$result = file_get_contents(
    'http://example.com/submit.php', 
    false, 
    stream_context_create(array(
     'http' => array(
      'method' => 'DELETE' 
     ) 
    )) 
); 

Guarda anche questi due articoli sul fare REST con PHP

+0

Funziona e l'ho votato, ma l'inconveniente è che "l'apertura dell'URL remota" tramite file_get_contents può essere bloccato nella configurazione e che è stato preso in considerazione – Ekonoval

+0

@Ekonoval, proprio come deve essere preso in considerazione che cURL potrebbe non installato :) – Gordon

3

In generale, se si desidera inviare un po 'di richiesta di "non-GET", lavorerai spesso con curl.


E si utilizzerà la funzione curl_setopt per configurare la richiesta che si sta inviando; tra la grande quantità di possibili opzioni, per modificare il metodo di richiesta, sarete interessati da almeno quelle opzioni (citando):

  • CURLOPT_CUSTOMREQUEST: Un metodo di richiesta personalizzato da utilizzare al posto di "GET" o "HEAD" quando si esegue una richiesta HTTP. Questo è utile per fare "DELETE" o altre richieste HTTP più oscure.
  • CURLOPT_HTTPGET: TRUE per reimpostare il metodo di richiesta HTTP su GET.
  • CURLOPT_POST: TRUE per eseguire un normale HTTP POST.
  • CURLOPT_PUT: TRUE a HTTP PUT un file. Il file su PUT deve essere impostato con CURLOPT_INFILE e CURLOPT_INFILESIZE.


Naturalmente, curl_setopt non è l'unica funzione che verrà utilizzato; vedere la pagina di documentazione di curl_exec per un esempio di come inviare una richiesta con arricciatura.

(Sì, che l'esempio è piuttosto semplice, e invia una richiesta di GET - ma si dovrebbe essere in grado di costruire da lì ;-))

+0

'CURLOPT_POST' è usato per inviare la richiesta GET/DELETE, che dire di PUT/DELETE? – user198729

+0

per PUT, hai 'CURLOPT_PUT', e per DELETE, sembra che dovrai usare' CURLOPT_CUSTOMREQUEST' –

+1

corretto. Questo è quello che dice anche nel secondo articolo che ho linkato. – Gordon

Problemi correlati