2017-02-13 4 views
0

Возможно, на этот вопрос был дан ответ раньше, но я проверил все, что нашел в Интернете, и не смог заставить его работать ... Мне нужно сформировать такой запрос с PHP.PHP Curl и API

  • завиток Х ПОСТ "https://page.com/login/CODE" \
  • Н "Accept: применение/JSON, текст/*; д = 0,2" \
  • Н "AcceptCharset: utf8" \
  • Н «AcceptEncoding: GZIP, выкачать»\
  • д '{ "appCode": "КОД"}' \
  • --cacert cacert.pem \
  • --compressed

Вот мой PHP код:

$data = array('appCode'=>'CODE'); 
$data_json = json_encode($data); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_CAINFO, "cacert.pem"); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($curl, CURLOPT_URL, URL_REQUEST); 
curl_setopt($curl, CURLOPT_HEADER, FALSE); 
curl_setopt($curl,CURLOPT_ENCODING , ""); 
    //curl_setopt($ch, CURLOPT_POST, 1); 
    //curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

Если я получаю правильный ответ от API он должен быть массив JSON, Alse массаж Ошибка входа.

не получил понятия, что этот текст/*, д = 0,2" , любые предложения, что я делаю неправильно

Если кто-то будет нужно здесь код, который помог мне:?

$data = array('appCode'=>'CODE'); 
$data_json = json_encode($data); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($curl, CURLOPT_CAINFO, "cacert.pem"); 
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://login.com/CODE", 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_ENCODING => "", 
    CURLOPT_MAXREDIRS => 10, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
    CURLOPT_CUSTOMREQUEST => "POST", 
    CURLOPT_POSTFIELDS => $data_json, 
    CURLOPT_HTTPHEADER => array('cache-control: no-cache'), 
)); 

$response = curl_exec($curl); 
$err = curl_error($curl); 

curl_close($curl); 

if ($err) { 
    echo "cURL Error #:" . $err; 
} else { 
    echo $response; 
} 

в конце концов я нашел то, что было неправильно.

Я получил все руководство в PDF-файл. я копировал информацию заголовка из PDF и вставить его в Sublime Когда я копирую и информацию заголовка пасты как этот Content-Type: применение/JSon

На возвышенной было показано, как правило, с тире (-), но когда я открыл с другим программным обеспечением, например блокнотом ++ это показывало без тир. ТипСодержимые: применение/JSON

Это была проблема, почему мой код не работает :)

+0

текст/*; q = 0.2 "называется фактором качества носителя и используется для присвоения приоритета файлам, в этом случае обычный текст имеет точность 0,2 по шкале от 0 до 1 –

+0

Может быть, это причина, по которой ее не работает ? – ekavet

+0

нет, вы не задаете все параметры, необходимые для вашего завитка –

ответ

0

Я знаю хороший трюк для таких завиток «переводы»
Вы можете скачать Postman here, а не выполнить ваш запрос как обычно один
Подробнее о Postman here.
Когда вы закончите свое здание запроса, вы можете просто перейти в код (в правом верхнем углу, ниже Сохранить) -> и выбрать, какой язык вы предпочитаете. В вашем случае PHP Curl. После этого вы можете просто скопировать этот код в свой запрос на завивание.
Это будет выглядеть следующим образом: curl example from Postman

EDIT: cUrl И вот как это будет выглядеть, если вы выбрали вариант Curl в «Кодекс».

+0

Проблема заключается в том, что я должен делать это с моего сервера, потому что доступ к API может выполняться только с IP-адреса сервера. – ekavet

+0

Вы также можете найти опцию cUrl для кода в Postman. – Grynets

+0

Я добавил Edit, чтобы вы могли видеть как это выглядит. – Grynets

0

Эта опция должна быть раскоментирована, если вам нужен запрос POST

curl_setopt($ch, CURLOPT_POST, 1); 
+0

Нет, это не я :) Я уже пытался его прокомментировать. Это не тот случай. CURLOPT_POSTFIELDS тоже должен отправить сообщение заголовка. .. – ekavet