2010-06-20 11 views
73

Wie kann ich POST-Daten an eine URL in PHP (ohne ein Formular) senden?POST Daten zu einer URL in PHP

Ich werde es verwenden, um eine Variable zu senden, um ein Formular zu vervollständigen und zu senden.

Antwort

157

Wenn Sie schauen, Daten an eine URL von PHP-Code schreiben selbst (ohne ein HTML-Formular) kann es mit curl erfolgen. Es wird wie folgt aussehen:

$url = 'http://www.someurl.com'; 
$myvars = 'myvar1=' . $myvar1 . '&myvar2=' . $myvar2; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $myvars); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$response = curl_exec($ch); 

Dies wird die POST-Variablen an die angegebene URL senden, und was die Seite kehrt in $ response sein wird.

+1

Soweit Ihre Lösung korrekt ist, denke ich, dass der OP wissen wollte, wie man es mit HTML-Formular macht. Obwohl die Frage nicht sehr klar war. –

+0

Wir konnten das Problem nicht verstehen, aber es sperrt das Programm. – albatross

+0

kümmern, um zu erarbeiten, was "CURLOPT_FOLLOWLOCATION", "CURLOPT_HEADER" und "CURLOPT_RETURNTRANSFER" tun? Ich möchte Code nicht kopieren, den ich nicht vollständig verstehe. –

10

Ihre Frage ist nicht besonders klar, aber für den Fall, dass Sie POST-Daten an eine URL senden möchten, ohne ein Formular zu verwenden, können Sie entweder fsockopen oder curl verwenden.

Hier a pretty good walkthrough of both

+0

Verbindung unterbrochen verwenden können. – kapa

+0

Link rot schlägt wieder ... – jfoucher

+2

Der Link funktioniert jetzt. –

57

cURL-less Sie in php5

$url = 'URL'; 
$data = array('field1' => 'value', 'field2' => 'value'); 
$options = array(
     'http' => array(
     'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
     'method' => 'POST', 
     'content' => http_build_query($data), 
    ) 
); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
var_dump($result); 
+5

file_get_contents ist oft auf Hosts von Drittanbietern deaktiviert und cURL ist die einzige Option – KryptoniteDove