我有一个简单的功能来通过POST
测试我的网络服务,如下所示:
function service(){
$service_url = 'http://example.com/example_endpoint/user';
$curl = curl_init($service_url);
$header = array(
'Content-Type: application/x-www-form-urlencoded'
);
$curl_post_data = array(
"name" => "name_test",
"mail" => "name_test@example.com",
"pass" => "123",
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$curl_response = curl_exec($curl);
curl_close($curl);
$xml = new SimpleXMLElement($curl_response);
}
webservice正在对数组中的参数进行处理,并且Content-Type被认为是application/x-www-form-urlencoded
但是当我在浏览器中运行该函数并检查“inspect element”上的“Network”选项卡时,尽管我将选项设置为GET
,但仍可通过POST
调用我的网络服务
并且Content-Type保持在text/html
此Web服务允许使用数组$curl_post_data
我使用Mozilla上的附加“Poster”来调用我的web服务并且它已经成功了,但是当我调用上面的函数时,它不起作用¿我怎么能实现这个函数才能正确调用?
答案 0 :(得分:0)
在浏览器的“网络”标签中,您将看不到POST,因为curl正在发布此内容。 “网络”选项卡显示客户端(浏览器)的活动。您的数据发布由服务器通过CURL发生。
将此代码添加到正确的url编码数据
$curl_post_data_string = '';
//url-ify the data for the POST
foreach($curl_post_data as $key => $value) {
$curl_post_data_string .= $key.'='.$value.'&';
}
rtrim($curl_post_data_string, '&');
并更改此行
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
请记住在点击CURL中的网址后看到的内容,您需要打印$curl_response
echo $curl_response;
这是使用CURL
发布数据的正确示例