PHP 使用 curl 提交 json、xml格式raw数据
PHP的 curl 类库,使用http方式 post 提交 json、xml 数据,只需要将json、xml等数据,转化成文本,直接放进 curl_setopt($curl, CURLOPT_POSTFIELDS, $data)。PHP 接收这些数据,可以从全局变量 $GLOBALS["HTTP_RAW_POST_DATA"] 获取,使用 json_encode 或者 simplexml_load_string 方法将文本转化为 Array。
post 方法
function post($url, $data, $headers)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 0,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $data,
));
if (!empty($headers)) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
$response = curl_exec($curl);
$errno = curl_errno($curl);
if ($errno) {
return false;
}
curl_close($curl);
return $response;
}
提交 json 格式数据
提交json数据,可以参考
$arr = [
"name" => "用户名",
"password" => "密码",
];
$data = json_encode($arr, JSON_UNESCAPED_SLASHES);
$headers = ["Content-Type: application/json"];
echo post("http://localhost/response.php", $data, $headers);
php 接收post 的json文本数据
$raw = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : null;
$data = json_decode($raw, JSON_OBJECT_AS_ARRAY);
print_r($data);
输出
Array
(
[name] => 用户名
[password] => 密码
)
提交xml格式数据
提交 xml 数据,可以参考
$data = <<<EOD
<xml>
<attach>weixin</attach>
<bank_type>ICBC_DEBIT</bank_type>
<cash_fee>2530</cash_fee>
<fee_type>CNY</fee_type>
<is_subscribe>N</is_subscribe>
<return_code>SUCCESS</return_code>
<total_fee>2530</total_fee>
</xml>
EOD;
$headers = ["Content-Type: application/xml"];
echo post("http://localhost/response.php", $data, $headers);
php 接收post的文本,转化为object
$raw = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : null;
$arr = simplexml_load_string($raw, 'SimpleXMLElement', LIBXML_NOCDATA);
print_r($arr);
输出
SimpleXMLElement Object
(
[attach] => weixin
[bank_type] => ICBC_DEBIT
[cash_fee] => 2530
[fee_type] => CNY
[is_subscribe] => N
[return_code] => SUCCESS
[total_fee] => 2530
)