2011-01-25 13 views
2

ローカルマシンでクライアント/サーバテストのシナリオを設定しています - 私はcURLを介してXML-RPCをサーバPHPスクリプトに送信するためのテストクライアントPHPスクリプトを持っています。サーバは、(var_dump($_POST)を使用して)POST配列の内容を返すことによって応答するPHP/cURL - POSTデータを受信して​​いないサーバ

$cnxn = curl_init(); 

$log = fopen("/var/www/mobile-client.localhost/www/curl.log", "w"); 

curl_setopt_array($cnxn, 
    array(
    CURLOPT_FRESH_CONNECT => false, 
    CURLOPT_HEADER => false, 
    CURLOPT_HTTPHEADER => array(
     "Content-Type: text/xml", 
    ), 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => "m=boomshakalaka", 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_STDERR => $log, 
    CURLOPT_URL => "http://mobile-server.localhost/rpc/index.php", 
    CURLOPT_VERBOSE => true, 
) 
); 

$response = curl_exec($cnxn); 

echo "<pre>"; 
var_dump(curl_errno($cnxn) . ':' . curl_error($cnxn), "<hr>", $response); 

fclose($log); 
curl_close($cnxn); 

しかし、応答は空です。

私は/var/www/mobile-client.localhost/www/curl.logで作成されたログファイルの内容は以下の内容があります。

* About to connect() to mobile-server.localhost port 80 (#0) 
* Trying 127.0.0.1... * connected 
* Connected to mobile-server.localhost (127.0.0.1) port 80 (#0) 
> POST /rpc/index.php HTTP/1.1 
Host: mobile-server.localhost 
Accept: */* 
Content-Type: text/xml 
Content-Length: 15 

< HTTP/1.1 200 OK 
< Date: Tue, 25 Jan 2011 04:57:15 GMT 
< Server: Apache/2.2.14 (Ubuntu) 
< X-Powered-By: PHP/5.3.2-1ubuntu4.7 
< Vary: Accept-Encoding 
< Content-Length: 1337 
< Content-Type: text/html 
< 
* Connection #0 to host mobile-server.localhost left intact 
* Closing connection #0 

また、私はWiresharkのと私のループバックアドレスを監視し、キャプチャログに次のように表示されている。

POST /rpc/index.php HTTP/1.1 
Host: mobile-server.localhost 
Accept: */* 
Content-Type: text/xml 
Content-Length: 15 

m=boomshakalaka 

私のPOSTデータはどこに消えていますか?実際のサーバの応答に興味のある人のための

- のindex.phpの内容は以下のとおりです。----

/* 
CURLOPT_HTTPHEADER => array(
    "Content-Type: text/xml", 
), 
*/ 

編集:

<?php 

var_dump(":)"); 
var_dump("POST: ", $_POST); 
var_dump("GET: ", $_GET); 
var_dump("SERVER: ", $_SERVER); 
+0

'のContent-Lengthで行く:1337' ...面白い。 'var_dump($ response)'はあなたに何を与えるのですか? –

+0

は、サーバーのスクリプトを表示するために投稿を編集しました – HorusKol

答えて

4

は、トリックを行う必要があり、この部分をコメントアウト

コンテンツタイプを明示的に指定する必要はありません。 cURLはCURLOPT_POSTFIELDSが文字列(application/x-www-form-urlencoded)か配列(multipart/form-data)かによって自動的に設定されます。 Reference

のContent-Typeは、特に application/x-www-form-urlencoded(ない text/xml)に設定する必要がありました
+0

ありがとうございます - ドキュメントを少し間違って読んでいました;) – HorusKol

0

あなたはカール内容をダンプしたい場合は、

var_dump(curl_getinfo($cnxn, CURLINFO_HEADER_OUT)); 
関連する問題