【问题标题】:POST Request PHP with Curl使用 Curl POST 请求 PHP
【发布时间】:2019-03-13 21:09:49
【问题描述】:

我正在做一个 wordpress 项目,我必须修改我的主题,所以我可以向外部 API 请求 JSON。 我一直在互联网上搜索如何做到这一点,很多人使用 CURL。

我必须做一个 POST 请求,但我不知道它是如何工作的或如何去做。 到目前为止,我已经运行了这段代码:

 $url='api.example.com/v1/property/search/';

 $data_array =  array(

            $id_company     =>  '123456',
            $api_token     =>  'abcd_efgh_ijkl_mnop',
    );

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_POST, 1);

        curl_setopt($curl, CURLOPT_POSTFIELDS, $data_array);
        curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'APIKEY: 111111111111111111111',
        'Content-Type: application/json'
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

        $result = curl_exec($curl);
        if(!$result){die("Connection Failure");}
        curl_close($curl);
         echo($result);

我不知道应该将身份验证信息放在哪里,也不知道 curl 方法在 PHP 中是如何工作的。各位大佬能帮我看看吗?

【问题讨论】:

  • curl 是 php 的遗物,使用起来很痛苦。我建议使用作为作曲家库提供的docs.guzzlephp.org(如果你有这方面的经验)。然而,这个问题本身对我来说并没有什么意义,比如 wordpress 主题与在 php 中执行 POST 请求有什么关系?
  • 这是您的实际代码吗?在这一行之后你永远不会关闭数组curl_setopt($curl, CURLOPT_HTTPHEADER, array(

标签: php json wordpress api request


【解决方案1】:

那里有一些对您有帮助的答案,例如this one。

然而,WordPress 实际上有内置函数来发出 GET 和 POST 请求(我相信这实际上回退到 cURL?)名为 wp_remote_get() 和 wp_remote_post()。显然,在您的情况下,您需要使用 wp_remote_post()。

$url = 'https://api.example.com/v1/property/search/';

$data_array = array(
    'id_company' => 123456,
    'api_token'  => 'abcde_fgh'
);

$headers = array(
    'APIKEY' => 1111111111,
    'Content-Type' => 'application/json'
);

$response = wp_remote_post( $url, array(
        'method' => 'POST',
        'timeout' => 45,
        'redirection' => 5,
        'httpversion' => '1.0',
        'blocking' => true,
        'headers' => $headers,
        'body' => $data_array,
        'cookies' => array()
    )
);

if( is_wp_error( $response ) ){
    $error_message = $response->get_error_message();
    echo "Something went wrong: $error_message";
} else {
    echo 'Success! Response:<pre>';
        print_r( $response );
    echo '</pre>';
}

【讨论】:

  • 感谢您的回答。我刚刚用你刚刚给我的代码替换了我的代码。我从服务器得到一个 {"status":"error"} 。我想知道我在哪里传递 API 给我的 id 和 token?以及我必须如何构建该身份验证信息?
  • 您要向其发送数据的应用程序将详细说明他们想要数据的方式。通常它在正文或标头中作为 key =&gt; value 对,但根据您将数据发送到的服务,它可能会有所不同
  • 感谢两个答案,真的帮了我很多=)
猜你喜欢
  • 2020-09-07
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多