2009-07-07 6 views
4

Greets. Donc, je cours Fedora Core 8 sur un Amazon EC2. J'ai installé httpd, php5 et libcurl, et plein d'autres choses. Semblait fonctionner très bien, mais ensuite j'ai réalisé que les données POST ne sont pas envoyées par curl dans mes scripts PHP. La même requête dans la ligne de commande fonctionne. J'ai également exécuté les mêmes scripts PHP sur ma machine locale (Win XP) et une autre machine distante (Ubuntu), et ils fonctionnent bien, les données POST sont envoyées, mais pas sur le FC8. Est-ce qu'il nécessite une configuration spéciale? Des problèmes de pare-feu?Envoi de données POST avec curl et php

Voici le code PHP:

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

Voici la commande curl correspondante:

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

Je trouve également l'entrée correspondante dans le error_log apache, et voici ce que je suis venu avec:

* 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 

Les données POST ne sont pas envoyées, voir? Des idées?

Merci d'avance à tous. ~ K.

Répondre

8

On dirait que ce fait tourner la demande POST GET:

curl_setopt($ch, CURLOPT_NOBODY, 0); 

Retirez cette ligne et il fonctionne.

CURLOPT_NOBODY

Un paramètre non nul indique la bibliothèque de ne pas inclure la partie du corps dans la sortie. Cela n'est pertinent que pour les protocoles qui ont des parties d'en-tête et de corps distinctes.

+0

J'ai cherché pendant 4 heures. Haha! Merci beaucoup man =) – kovshenin

+0

et nous apprenons tous quelque chose de nouveau :-) –

1

Pas un expert dans ce domaine, mais j'ai mon propre code de travail qui fonctionne légèrement différemment. Peut-être que cela vous aidera

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

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

Il fait curl_init() définit d'abord l'URL, puis plus tard ...

$rawresponse = curl_exec($curlSession); 

-à-dire je ne sais pas, mais peut-être mettre l'url fait après une différence en quelque sorte ...?

+0

Merci pour l'essai David, mais malheureusement il n'a rien changé. Cela fonctionne sur mes deux autres machines cependant;) mais pas où je le veux, hehe – kovshenin

+0

ouais, doh! Je viens de lire le manuel, et ma réponse était des ordures! désolé, je ne peux pas aider –

+0

qu'en est-il curl_setopt ($ curlSession, CURLOPT_POST, 1); au lieu de 'vrai'. Encore une autre supposition de mon propre code couper-coller –

0

également vu this post où il suggère d'envoyer les champs de poste comme un tableau au lieu de chaîne

+0

Essayé .. Nope :( – kovshenin

+0

alors je suis coincé aussi, désolé encore –

+0

Aucun problème homme, je cherchais une réponse pour environ 4 heures maintenant;) Merci pour vos efforts – kovshenin

Questions connexes