Используя php curl, я пытаюсь подключиться к API, который я построил. У меня проблемы с созданием пользовательского заголовка с помощью curl, который пытается диктовать некоторую информацию заголовка, такую как Content-Type, Content-Length.
Я также изо всех сил пытаюсь понять, как правильно отправить (опубликовать) http-тело, полное данных JSON.
По сути, я пытаюсь сделать так, чтобы заголовок имел Content-Type, Content-Length, некоторые пользовательские поля, такие как $ api => «45234523452345», $ hashedKey => «32413211234123».
Хорошо отправить полезную нагрузку (массив json или многомерный кодированный json) в http-body.
Вот что я пытаюсь использовать прямо сейчас.
public function mainRequest($url, $apiKey) {
$payload = array(
'test' => 'data'
);
$jsonPayload = urlencode(json_encode($payload));
$encyptedKey = $this->dataEncyptor->hashData($apiKey);
$header = array(
'Content-Type:' => 'application/json',
'Content-Length:' => strlen($jsonPayload),
'x-public' => $apiKey,
'x-hash' => $encyptedKey
);
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $fp);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
В моем журнале ошибок я получаю это:
* About to connect() to local.nslim.ca port 80 (#0)
* Trying 127.0.0.1...
* connected
* Connected to local.nslim.ca (127.0.0.1) port 80 (#0)
> POST /datacheck HTTP/1.1
Host: local.nslim.ca
Accept: */*
Content-Length: 29
Content-Type: application/x-www-form-urlencoded
* upload completely sent off: 29 out of 29 bytes
< HTTP/1.1 404 Not Found
< Date: Fri, 17 Oct 2014 03:05:43 GMT
< Server: Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8za DAV/2 PHP/5.5.3
< X-Powered-By: PHP/5.5.3
< Content-Length: 514
< Content-Type: text/html
<
* Connection #0 to host local.nslim.ca left intact
* Closing connection #0
И выводится на экран:
HTTP / 1.1 404 Not Found Дата: пт, 17 октября 2014 03:06:07 GMT Сервер: Apache / 2.2.25 (Unix) mod_ssl / 2.2.25 OpenSSL / 0.9.8za DAV / 2 PHP / 5.5.3 X-Powered -By: PHP / 5.5.3 Content-Length: 514 Content-Type: text / html
404 Страница не найдена
Страница, которую вы ищете, не может быть найдена. Проверьте адресную строку, чтобы убедиться, что ваш URL написан правильно. Если ничего не помогает, вы можете посетить нашу домашнюю страницу по ссылке ниже.
Посетите домашнюю страницу
Должен ли setopt cURL быть в каком-то определенном порядке?
Спасибо за любую помощь!
Таким образом, очевидный вопрос, у вас есть правильный URL? 404 не указывает на ошибку на странице, скорее, страницы нет. Это должен быть datacheck.php?
Кроме того, вы не отправляете свои данные в виде стандартной веб-формы, поэтому вам нужно изменить заголовок Content-Type на «text / json» и получить его в своем скрипте, используя php://input
.
Редактировать: см. Также RAW POST с использованием cURL в PHP
Других решений пока нет …