POST-запрос PHP с Curl

Я работаю над проектом WordPress, где мне нужно изменить свою тему, поэтому я могу запросить JSON для внешнего API. Я искал в Интернете, как это сделать, и многие люди используют 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 связана с выполнением запроса POST в php?

Flame 13.03.2019 22:17

Это ваш настоящий код? вы никогда не закрываете массив после этой строки curl_setopt($curl, CURLOPT_HTTPHEADER, array(

ArSeN 13.03.2019 22:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько ответов, которые могут вам помочь, например Вот этот.

Тем не менее, 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? и как я должен структурировать эту информацию для аутентификации?

Shirux 13.03.2019 23:00

Приложение, которому вы отправляете данные, будет иметь особенности того, как они хотят получить данные. Обычно это пара key => value в теле или заголовках, но она может сильно отличаться в зависимости от службы, в которую вы отправляете данные.

Xhynk 14.03.2019 00:06

Спасибо за оба ответа, очень помогли мне =)

Shirux 14.03.2019 23:30

Другие вопросы по теме