2010-01-28 6 views
15

Ich sehe nie, wie PUT/DELETE Anfrage gesendet wird.Wie starte ich eine GET/POST/PUT/DELETE Anfrage und beurteile den Anfragetyp in PHP?

Wie geht das in PHP?

Ich weiß, wie eine GET/POST-Anfrage mit curl senden:

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

Aber wie PUT/DELETE Anfrage zu tun?

+0

Um eine PUT-Anfrage zu bekommen, you cant do _PUT $ [ 'var'], aber: 'parse_str (file_get_contents ('php: // input'), $ put_vars);' – Strae

+0

'$ _PUT' wird fehlschlagen, aber' php: // input' funktioniert. – user198729

Antwort

46

Für DELETE Verwendung curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
Für PUT Verwendung curl_setopt($ch, CURLOPT_PUT, true);

Eine Alternative, die nicht auf cURL installiert angewiesen wäre file_get_contents zu verwenden, um mit einem custom HTTP stream context.

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

Schauen Sie sich diese beiden Artikel auf REST tun mit PHP

+0

Es funktioniert und ich habe dafür gestimmt, aber der Nachteil ist, dass 'remote URL-Eröffnung' über file_get_contents kann blockiert werden in der Konfiguration und das hat berücksichtigt werden – Ekonoval

+0

@Ekonoval sicher, genau wie es berücksichtigt werden muss, dass cURL könnte nicht installiert werden :) – Gordon

3

Generell, wenn Sie einige "nicht-GET" Anfrage senden möchten, Sie arbeiten oft mit curl.


Und Sie verwenden die curl_setopt Funktion, um die Anfrage zu konfigurieren, die Sie senden; unter der großen Menge an möglichen Optionen, die Request-Methode zu ändern, werden Sie von zumindest diese Optionen interessiert sein (Zitat):

  • CURLOPT_CUSTOMREQUEST: Eine benutzerdefinierte Request-Methode zu verwenden anstelle von „GET“ oder "HEAD" bei einer HTTP-Anfrage. Dies ist nützlich für "DELETE" oder andere, obskurere HTTP-Anfragen.
  • CURLOPT_HTTPGET: TRUE, um die HTTP-Anforderungsmethode auf GET zurückzusetzen.
  • CURLOPT_POST: TRUE, um eine regelmäßige HTTP POST zu tun.
  • CURLOPT_PUT: TRUE zu HTTP PUT eine Datei. Die Datei PUT muss mit CURLOPT_INFILE und CURLOPT_INFILESIZE eingestellt werden.


Natürlich curl_setopt ist nicht die einzige Funktion, die Sie verwenden werden; Auf der Dokumentationsseite von curl_exec finden Sie ein Beispiel für das Senden einer Anforderung mit curl.

(Ja, das Beispiel ist ziemlich einfach, und sendet eine GET Anfrage - aber Sie sollten von dort ;-) aufbauen können)

+0

'CURLOPT_POST' wird benutzt um eine GET/DELETE Anfrage zu senden, was ist mit PUT/DELETE? – user198729

+0

für PUT haben Sie 'CURLOPT_PUT', und für DELETE scheint es, dass Sie' CURLOPT_CUSTOMREQUEST' verwenden müssen –

+1

Richtig. So steht es auch im zweiten Artikel, den ich verlinkt habe. – Gordon

Verwandte Themen