Мне нужно написать в 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» с помощью тестера. Что-то явно не так с параметрами завивки, которые я отправляю?
Вы имеете в виду, переместите его под if / else, верно? Сделал это и все равно получил "0". Код обновлен выше.
похоже, что в коде отсутствует curl_exec($channel);. Вы получаете информацию о несостоявшемся действии.
Обновленный код, все равно не повезло
Проверьте возвращаемое значение из всех функций, особенно. включают curl_exec.
Если я выхожу из $ channel после curl_exec ($ channel), я получаю 'Resource ID # 2'
$channel - ваша ручка, она всегда будет ресурсом. Интересная часть - это возвращаемое значение всех функций. $ret = curl_setopt(...), $ret = curl_exec(...). Как и в предоставленном коде, вы не проверяете ни один из вызовов на предмет ошибок или ожидаемых возвращаемых значений. Трудно понять, что не так, не убедившись, что все работает правильно.
Я многого не знаю! Как мне начать проверять звонки?






Если у вас есть статус 0, это означает, что HTTP-запрос вообще не завершился. Вы можете использовать следующие функции, чтобы узнать, какая ошибка произошла:
Примечания:
$response, но этой переменной не существует.CURLOPT_SSL_VERIFYPEER - действительно плохая идея. Убедитесь, что вы удалили его, прежде чем переходить к производству.Я обновил свой код этим if (curl_errno ($ channel)) {echo 'Curl error:'. curl_error ($ канал); } и я получаю "Нет ответа"
@DirtyBirdDesign - это на каком-то сервере или на вашем собственном компьютере?
Одна из серьезных возможностей заключается в том, что правила брандмауэра не позволяют вам получить доступ к этому API.
Нашел способ использовать curl_errno. Он возвращает "{" status ": 400," message ":" Плохие аргументы: пустой адрес электронной почты "," code ":" EmailEmpty "}", однако, когда я выводю полезные данные, он явно отправляет адрес электронной почты {"email": " [email protected] "," expired ": null," funded ": true}
Вероятно, вам стоит закрыть канал в конце.