我在本地计算机上设置客户端/服务器测试场景 - 我有一个测试客户端PHP脚本,用于通过cURL将XML-RPC发送到服务器PHP脚本。
$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);
但是,当服务器通过返回POST数组的内容(使用var_dump($_POST)
)进行响应时,响应为空。
我在/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的内容是:
<?php
var_dump(":)");
var_dump("POST: ", $_POST);
var_dump("GET: ", $_GET);
var_dump("SERVER: ", $_SERVER);
答案 0 :(得分:5)
评论这部分应该可以解决问题:
/*
CURLOPT_HTTPHEADER => array(
"Content-Type: text/xml",
),
*/
编辑----
您无需明确指定内容类型。 cURL将根据CURLOPT_POSTFIELDS
是字符串(application/x-www-form-urlencoded
)还是数组(multipart/form-data
)自动设置。 Reference
答案 1 :(得分:0)
Content-Type必须专门设置为application/x-www-form-urlencoded
(不是text/xml
)
答案 2 :(得分:0)
如果要转储cURL的内容,请使用
var_dump( curl_getinfo( $cnxn, CURLINFO_HEADER_OUT ) );