通过curl调用我的web服务不起作用

时间:2014-01-09 16:41:46

标签: web-services post curl get

我有一个简单的功能来通过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服务并且它已经成功了,但是当我调用上面的函数时,它不起作用¿我怎么能实现这个函数才能正确调用?

1 个答案:

答案 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

发布数据的正确示例

http://davidwalsh.name/curl-post