2009-07-07 12 views
4

Greets.Senden von POST-Daten mit Curl und PHP

Also, ich fahre Fedora Core 8 auf einem Amazon EC2. Ich installierte httpd, php5 und libcurl und eine Menge anderer Sachen. Scheint gut zu funktionieren, aber dann erkannte ich, dass POST-Daten nicht von curl in meinen PHP-Skripten gesendet werden. Die gleiche Anfrage in der Befehlszeile funktioniert tho. Ich habe auch die gleichen PHP-Skripte auf meinem lokalen Rechner (Win XP) und einem anderen entfernten Rechner (Ubuntu) ausgeführt, und sie laufen gut, die POST-Daten werden gesendet, aber nicht auf dem FC8. Benötigt es eine spezielle Konfiguration? Irgendwelche Firewall-Probleme?

Hier ist der PHP-Code:

error_reporting(E_ALL); 
$ch = curl_init("http://foller.me/tmp/postdump.php"); 
curl_setopt ($ch, CURLOPT_POST, true); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, "something=somewhere"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_NOBODY, 0); 

$response = curl_exec($ch); 

echo $response; 
curl_close($ch); 

Hier ist der entsprechende curl Befehl:

curl -d "something=somethingelse" http://foller.me/tmp/postdump.php 

ich den entsprechenden Eintrag auch in der Apache error_log gefunden, und hier ist, was ich kam mit:

* About to connect() to foller.me port 80 (#0) 
* Trying 75.101.138.148... * connected 
* Connected to foller.me (75.101.138.148) port 80 (#0) 
> GET /tmp/postdump.php HTTP/1.1 
Host: foller.me 
Accept: */* 

< HTTP/1.1 200 OK 
< Date: Tue, 07 Jul 2009 10:32:18 GMT 
< Server: Apache/2.2.9 (Fedora) 
< X-Powered-By: PHP/5.2.6 
< Content-Length: 31 
< Connection: close 
< Content-Type: text/html; charset=UTF-8 
< 
* Closing connection #0 

Die POST-Daten werden nicht gesendet, siehe? Irgendwelche Ideen?

Vielen Dank im Voraus jeder. ~ K.

Antwort

8

Sieht aus, als ob dies dann auch die Anforderung von POST sendet GET:

curl_setopt($ch, CURLOPT_NOBODY, 0); 

diese Zeile entfernen und es funktioniert.

CURLOPT_NOBODY

Ein Nicht-Null-Parameter teilt die Bibliothek nicht in der Ausgabe der Körper-Teil umfassen. Dies ist nur relevant für Protokolle, die separate Kopf- und Körperteile haben.

+0

Ich habe nach dem 4 Stunden gesucht. Haha! Vielen Dank Man =) – kovshenin

+0

und wir lernen alle etwas Neues :-) –

1

Kein Experte auf diesem Gebiet, aber ich habe meinen eigenen Arbeitscode, der etwas anders funktioniert. Vielleicht wird dies

// Open the cURL session 
    $curlSession = curl_init(); 

    // Set the URL 
    curl_setopt ($curlSession, CURLOPT_URL, $url); 

hilft Es macht den curl_init() zuerst, dann die URL setzt, dann später ...

$rawresponse = curl_exec($curlSession); 

dh ich habe keine Ahnung, aber vielleicht Einstellung die URL macht nach einem Unterschied irgendwie ...?

+0

Danke für den Versuch David, aber leider hat es nichts geändert. Es funktioniert zwar an meinen beiden anderen Maschinen;) aber nicht wo ich es haben will, hehe – kovshenin

+0

yeah, doh! Ich habe gerade das Handbuch gelesen und meine Antwort war Quatsch! Entschuldigung, ich kann nicht helfen –

+0

was ist mit curl_setopt ($ curlSession, CURLOPT_POST, 1); statt "wahr". Wieder eine Schätzung von meinem eigenen cut-and-paste Code –

0

sah auch this post wo es schlägt die Post Felder als Array statt String

+0

Versuchte es .. Nein :( – kovshenin

+0

dann bin ich auch fest, sorry wieder –

+0

Nein probs man, ich habe gesucht eine Antwort für ungefähr 4 Stunden jetzt;) Danke für Ihre Bemühungen – kovshenin