Проблема с отправкой заголовков в Rest API

Мне нужно написать в API, и, похоже, ничего не работает. Когда я использую apitester.com, он работает. Когда я использую свое приложение, это не так. Я вывожу заголовки и полезную нагрузку, и они выглядят одинаково между ними, поэтому я предполагаю, что делаю что-то не так. Вот мой PHP для отправки данных в API

<?php
    $email = $_POST['email'];
    $expired = NULL;
    $funded = TRUE;

    $data = array(
        "email" => $email,
        "expired" => $expired,
        "funded" => $funded
    );

    $url = 'https://my.rest.api';

    $json_string = json_encode($data);

    $headers = array (
        "Content-Type: application/json",
        "Authorization: Bearer xxx"    
    );

    $channel = curl_init($url);
    curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($channel, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($channel, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($channel, CURLOPT_POSTFIELDS, $json_string);
    curl_setopt($channel, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 10);
    $statusCode = curl_getInfo($channel, CURLINFO_HTTP_CODE);
    curl_exec($channel);   

    http_response_code($statusCode);
    if ( $statusCode != 200 ){
       echo "Data submitted was ".$json_string." Returned status code: {$statusCode} \n".curl_error($channel);
    } else {
       echo $response;
    }
    //I turn the below 2 lines on and off to see what I am actually sending
    // print_r($headers);
    // echo $json_string;

    curl_close($channel);
?>

Я получаю возвращенный код статуса «0» в моем приложении, но «200» с помощью тестера. Что-то явно не так с параметрами завивки, которые я отправляю?

Вероятно, вам стоит закрыть канал в конце.

LMC 13.11.2018 18:19

Вы имеете в виду, переместите его под if / else, верно? Сделал это и все равно получил "0". Код обновлен выше.

Dirty Bird Design 13.11.2018 18:20

похоже, что в коде отсутствует curl_exec($channel);. Вы получаете информацию о несостоявшемся действии.

LMC 13.11.2018 18:23

Обновленный код, все равно не повезло

Dirty Bird Design 13.11.2018 18:26

Проверьте возвращаемое значение из всех функций, особенно. включают curl_exec.

bishop 13.11.2018 18:27

Если я выхожу из $ channel после curl_exec ($ channel), я получаю 'Resource ID # 2'

Dirty Bird Design 13.11.2018 18:30
$channel - ваша ручка, она всегда будет ресурсом. Интересная часть - это возвращаемое значение всех функций. $ret = curl_setopt(...), $ret = curl_exec(...). Как и в предоставленном коде, вы не проверяете ни один из вызовов на предмет ошибок или ожидаемых возвращаемых значений. Трудно понять, что не так, не убедившись, что все работает правильно.
bishop 13.11.2018 18:32

Я многого не знаю! Как мне начать проверять звонки?

Dirty Bird Design 13.11.2018 18:34
Стоит ли изучать 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 и хотите разрабатывать...
1
8
42
1

Ответы 1

Если у вас есть статус 0, это означает, что HTTP-запрос вообще не завершился. Вы можете использовать следующие функции, чтобы узнать, какая ошибка произошла:

Примечания:

  • Вы повторяете $response, но этой переменной не существует.
  • Использование CURLOPT_SSL_VERIFYPEER - действительно плохая идея. Убедитесь, что вы удалили его, прежде чем переходить к производству.

Я обновил свой код этим if (curl_errno ($ channel)) {echo 'Curl error:'. curl_error ($ канал); } и я получаю "Нет ответа"

Dirty Bird Design 13.11.2018 18:38

@DirtyBirdDesign - это на каком-то сервере или на вашем собственном компьютере?

Evert 13.11.2018 18:42

Одна из серьезных возможностей заключается в том, что правила брандмауэра не позволяют вам получить доступ к этому API.

Evert 13.11.2018 18:43

Нашел способ использовать curl_errno. Он возвращает "{" status ": 400," message ":" Плохие аргументы: пустой адрес электронной почты "," code ":" EmailEmpty "}", однако, когда я выводю полезные данные, он явно отправляет адрес электронной почты {"email": " [email protected] "," expired ": null," funded ": true}

Dirty Bird Design 13.11.2018 19:39

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