POSTEN Sie Daten an eine URL in PHP

93

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

Ich werde es zum Senden einer Variablen verwenden, um ein Formular auszufüllen und zu senden.

Belgin Fisch
quelle

Antworten:

192

Wenn Sie Daten aus dem PHP-Code selbst (ohne Verwendung eines HTML-Formulars) an eine URL senden möchten, können Sie dies mit curl tun. Es wird so 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 );

Dadurch werden die Post-Variablen an die angegebene URL gesendet, und die Rückgabe der Seite erfolgt in $ response.

Peter Anselmo
quelle
2
Soweit Ihre Lösung korrekt ist, wollte das OP wissen, wie es mit HTML-Formularen funktioniert. Obwohl die Frage nicht sehr klar war.
Helen Neely
Wir konnten das Problem nicht verstehen, aber es sperrt das Programm.
Albatros
2
egal , was zu erarbeiten CURLOPT_FOLLOWLOCATION, CURLOPT_HEADERund CURLOPT_RETURNTRANSFERzu tun? Ich ziehe es vor, keinen Code zu kopieren, den ich nicht vollständig verstehe.
Stefan Fabian
1
@Mike, obwohl das stimmt, würde ich es vorziehen, alles in einer Antwort zu haben, um entweder von Anfang an klar zu sein oder in der Antwort erklärt zu werden, da die Leute normalerweise zum Stapelüberlauf kommen, um eine Antwort zu erhalten, um keine weiteren Fragen zu erhalten.
Stefan Fabian
1
@Stefan Ich fand die Antwort vollkommen klar ... sie ging auf die Frage ein. Wenn Ihr Verständnis unter dem Niveau der Antwort liegt, machen Sie weitere Nachforschungen. Muss er auch erklären, dass das $urleine hat, $weil in PHP so eine Variable angegeben wird? Wo ziehst du die Grenze? "... nicht mehr Fragen zu bekommen" ist nicht die Einstellung von jemandem, der es schafft, sich selbst zu lernen, insbesondere zu programmieren.
Mike
75

cURL-less kannst du in php5 verwenden

$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);
Burak Öztürk
quelle
6
file_get_contents ist auf Hosts von Drittanbietern häufig deaktiviert und cURL ist die einzige Option
KryptoniteDove
3
@KryptoniteDove Ich weiß, dass es oft deaktiviert ist. Aufgrund habe ich eine Zeile oben auf meine Antwort "CURLESS" gesetzt
Burak Öztürk
10

Ihre Frage ist nicht besonders klar, aber wenn Sie POST-Daten ohne Verwendung eines Formulars an eine URL senden möchten, können Sie entweder fsockopen oder curl verwenden.

Hier ist eine ziemlich gute Anleitung für beide

jfoucher
quelle