cURL PHP RESTful сервис всегда возвращает ЛОЖЬ - PullRequest
7 голосов
/ 14 апреля 2011

У меня возникли некоторые трудности при размещении объекта 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() 
?>

Ответ $ возвращает просто «ложь»

Есть мысли?

1 Ответ

24 голосов
/ 14 апреля 2011

$response вероятно ложно, потому что curl_exec() возвращает ложь (то есть, сбой) в $result.Отобразите curl_error($ch) (после вызова curl_exec), чтобы увидеть ошибку cURL, если в этом проблема.

С другой стороны, я думаю, что ваш CURLOPT_POSTFIELDS имеет недопустимый формат.Вы не передаете ей строку JSON.

Этот параметр может быть передан в виде строки с кодированием в формате urlen, например 'para1 = val1¶2 = val2 & ...', или в виде массива с полемимя в качестве ключа и данные поля в качестве значения.

- PHP документы для curl_setopt ()


Обновление

Быстрый способ избежать ошибки SSL заключается в добавлении этой опции:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Вы получаете ошибку проверки SSL, потому что cURL, в отличие от браузеров, не имеет предварительно загруженного списка доверенных центров сертификации (CA), поэтому никакие сертификаты SSL не являются доверенными по умолчанию.Быстрое решение - просто принять сертификаты без проверки с помощью строки выше.Лучшее решение - вручную добавить только те сертификаты или сертификаты, которые вы хотите принять.См. эту статью о cURL и SSL для получения дополнительной информации.

...