2013-12-09 6 views
0

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

Для этого примера предположим, что есть два значения, которые я могу передать API: адрес электронной почты и местоположение.

Кроме того, я должен использовать базовую HTTP-аутентификацию, где пароль пуст, а имя пользователя - это мой ключ API.

Чтобы помочь вам понять, что я иду, это пример, приведенный ко мне в документации API:

$ curl -X POST https://therequestpath -u $API_KEY: \ 
--form email=myemailaddress \ 
--form location='mylocation' \ 
--form content-type=application/json 
{"id":"750ea3d7"} 

В этот момент я действительно не совсем понимаю, что я делаю, но это код, который я придумал до сих пор (не бросать какие-либо ошибки PHP, но это не делает то, что я хочу, либо):

$username = 'myapikey'; 
$password = ''; 
$host = 'https://therequestpath'; 
$data = array('email' => 'myemailaddress', 'location' => 'mylocation'); 

$process = curl_init($host); 
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); 
curl_setopt($process, CURLOPT_HEADER, 1); 
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_POST, 1); 
curl_setopt($process, CURLOPT_POSTFIELDS, $data); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); 
curl_exec($process); 
curl_close($process); 

Я не уверен, если я «Ошибка при аутентификации HTTP, передача значений по электронной почте/местоположению или и то, и другое. Любая помощь будет оценена по достоинству.

+0

В PHP не следует отправлять тип содержимого приложения/json' вместо 'application/xml'? –

+1

Также обратите внимание, что вы используете 'content-type' в командной строке, но' Content-Type' в PHP. Это может иметь значение. И я также не понимаю последние две строки вашего примера из командной строки - разве вы не опустили символ \ в конце четвертой строки? –

+0

@ peci1 - API принимает как json & xml. Прямо перед тем, как я разместил здесь, я изменил свой код с json на xml, чтобы узнать, не изменилось ли это. Я просто забыл удалить его, прежде чем скопировать код. Спасибо за уловку. Случай с контентом был одним из моих вопросов! Спасибо за хороший глаз. Я не уверен, что в ближайшее время я поймаю это по-своему. Вторая проблема заключалась в одинарных кавычках в массиве $ data. После того как я удалил эти * и * сменил тип содержимого, все сработало. – Duplosion

ответ

2

Первый пример командной строки показывает приложения/JSON как тип контента, так что вы должны использовать то же самое в вашем PHP скрипт:

curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

Также вы должны URL-encode каждое поле POST, как это:

$data = array('email' => urlencode('myemailaddress'), 'location' => urlencode('mylocation')); 
+0

Спасибо за советы. Я изменил тип контента на json. Кроме того, теперь я использую urlencode для значений. Я все еще не получаю ожидаемых результатов, но спасибо, что помог мне очистить все. – Duplosion