【问题标题】:Call webservice with PHP curl使用 PHP curl 调用 web 服务
【发布时间】:2019-08-13 08:31:18
【问题描述】:

我目前正在尝试使用 PHP curl 调用 POST Web 服务。我试过这个,但没有成功(我收到“假”,目的是从我的网络服务接收一个字符串):

function devis( $data){
    $typeDevis = $data['typeDevis'];
    $compo = $data['compo'];
    $offre = $data['offre'];

    $url = "https://someadress:port/apiname/api/Devis";
    try{
        $fields = array(
            'typeDevis' => $typeDevis,
            'compo' => $compo,
            'offre' => $offre,
        );

        $fields_string = http_build_query($fields);

        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POST, count($fields));
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

        $result = curl_exec($ch);

        curl_close($ch);
        return $result;
    }catch (Exception $e) {
        return $e;
    }
}

POST中必须调用的链接例如:

https://someadress:port/apiname/api/Devis?typeDevis=VALUE1&compo=VALUE2&offre=VALUE3

有人有什么想法吗?

【问题讨论】:

  • 您发布的 URL 正在传递查询字符串中的数据,提示应该是 GET, 而不是 POST?或者,如果它需要是 POST,那么您应该将数据添加到 $url-variable,使其看起来就像您发布的示例链接。

标签: php web-services curl post php-curl


【解决方案1】:

你需要修改你的函数如下:

function devis($data){
    $typeDevis = $data['typeDevis'];
    $compo = $data['compo'];
    $offre = $data['offre'];

    $url = "https://someadress:port/apiname/api/Devis";
    try{
        $fields = array(
            'typeDevis' => $typeDevis,
            'compo' => $compo,
            'offre' => $offre,
        );

        // You don't need to use this
        //$fields_string = http_build_query($fields);

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $result = curl_exec($ch);

        curl_close($ch);
        return $result;
    }catch (Exception $e) {
        return $e;
    }
}

尝试使用正确的curl 语法并具体说明您想要实现的内容。
此外,如果您为 API 请求提供适当的 header 会更好。

【讨论】:

  • “您在 URL 本身中传递查询参数。这在您的上下文中是不正确的” - 当我阅读问题时,情况正好相反。他们的代码传递 URL 中的数据,而他们发布的示例 URL 传递数据。
  • 是的,你是对的。也许我以错误的方式获得了该 URL。顺便说一句,这在我的回答中并不重要。
  • 恕我直言,我们应该等到 OP 明确了数据应该如何传递以及它是否真的应该是一个 POST。
  • 感谢您的回答!实际上,该方法必须在 POST 中(出于安全原因,已强制执行此操作)。使用 POST 方法调用 REST 链接时,原理与 SoapUI(对于那些知道的人)相同。我来看看Header。
猜你喜欢
  • 2014-07-28
  • 2023-04-08
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2021-06-21
  • 2011-12-01
相关资源
最近更新 更多