У меня возникают некоторые трудности с POSTing объекта json API, который использует REST. Я новичок в использовании cURL, но я искал все, чтобы попытаться найти ответ на мою проблему, но придумал короткий. Мой запрос cURL всегда возвращает false. Я знаю, что это даже не сообщение моего объекта json, потому что я все равно получаю ответ от url. Мой код ниже.
<?php //API KEY = APIUsername //API_CODE = APIPassword $API_Key = "some API key"; $API_Code = "some API code"; $API_email = "email@email.com"; $API_password = "ohhello"; $url = "http://someURL.com/rest.svc/blah"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); header('Content-type: application/json'); $authData = "{\"APIUsername\":\"$API_Key\",\"APIPassword\":\"$API_Code\",\"EmailAddress\":\"$API_email\",\"Password\":\"$API_password\"}"; curl_setopt($ch, CURLOPT_POSTFIELDS, $authData); //make the request $result = curl_exec($ch); $response = json_encode($result); echo $response; curl_close() ?>
$ Response возвращает только «false»,
Есть предположения?
$response
скорее всего false, потому что curl_exec()
возвращает false (т. е. сбой) в $result
. curl_error($ch)
(после вызова curl_exec), чтобы увидеть ошибку cURL, если это проблема.
С другой стороны, я думаю, что ваш CURLOPT_POSTFIELDS находится в недопустимом формате. Вы не передаете строку JSON.
Этот параметр может быть передан как строка с urlencoded, например 'para1 = val1 & para2 = val2 & …', или как массив с именем поля в качестве ключа и данными поля в качестве значения.
– PHP-документы для curl_setopt ()
Обновить
Быстрый способ избежать ошибки SSL – добавить эту опцию:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Вы получаете ошибку проверки SSL, потому что cURL, в отличие от браузеров, не имеет предварительно загруженного списка доверенных центров сертификации (CA), поэтому сертификатам SSL по умолчанию не доверяют. Быстрое решение – просто принять сертификаты без проверки, используя приведенную выше строку. Лучшее решение – это вручную добавить только сертификаты или CA (ы), которые вы хотите принять. См. Эту статью о cURL и SSL для получения дополнительной информации.