Как отправить запрос методом POST на адрес ROOT URL?

316
30 июня 2017, 08:23

Как отправить POST запрос следующего вида:

POST /gate/ki-site-api/ HTTP/1.1
Host: api.site.ru
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
id=get_pdf&username=username&params=...

Пробую сделать так:

<?
ini_set('display_errors',1);
error_reporting(E_ALL);
$url = 'https://api.site.ru/gate/sie-api/';
$data = array('id' => 'make_pdf', 'username' => 'username','account_id' =>'1152289', 'period_id' => '201705');
$params = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)
    )
);
$context  = stream_context_create($params);
$result = file_get_contents($url, true, $context);
if ($result === FALSE) 
var_dump($result);
?>

Получаю ответ:

HTML> string(51) "{"err_msg": "Authorization failed.", "err_code": 1}"

Из документации:

Для того, чтобы обратиться к конкретному методу API, Вам необходимо отправить запрос методом POST на адрес ROOT URL. Этот запрос должен содержать следующие обязательные параметры: id - идентификатор метода, который Вы намерены вызвать. Например, get_main_id. См. раздел соответствующей группы методов. username - ваше имя пользователя - username.

Не могу понять как пройти авторизацию и получить нужные данные. $url и username в описании изменены. Может ли не проходить авторизация из-за того что я выполняю запрос со стороннего сайта?

Answer 1

Поскольку API находится на HTTPS, то помимо HTTP, вам еще нужно настроить SSL-опции, добавив в массив опций соотв-щий подмассив с ключом ssl. Если у вас на сервере есть файл сертификата, то нужно указать путь к нему опцией cafile либо capath. Если же его у вас нет, то вам нужно отключить опции verify_peer и verify_peer_name.

Кроме того, вы передаете неправильный URL API. В описании запроса у вас указан URL 'https://gate/ki-site-api/', а в file_get_contents по факту передается 'https://api.site.ru/gate/sie-api/'.

В итоге ваш код должен примерно таким:

$url = 'https://api.site.ru/gate/ki-site-api/';
$data = array('id' => 'make_pdf', 'username' => 'username','account_id' =>'1152289', 'period_id' => '201705');
$params = array(
    'http' => array(
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'method'  => 'POST',
        'content' => http_build_query($data)
    ),
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
    ),
);
$context = stream_context_create($params);
$result = file_get_contents($url, true, $context);
READ ALSO
Изменения в php-файлах не видны без перезагрузки apache

Изменения в php-файлах не видны без перезагрузки apache

здравствуйте, я установил на свой сервер OPcache (использую связку apache+nginx), после установки, добавил в конфиг пару строк (я взял их из рекомендаций...

339
Как в Phalcon реализовать коннект двух БД, чтоб при записи коннект был к одной, а при чтении к другой

Как в Phalcon реализовать коннект двух БД, чтоб при записи коннект был к одной, а при чтении к другой

Да, при работе с моделями можно использовать $this->setReadConnectionService('dbSlave') и $this->setWriteConnectionService('dbMaster'), но сложность возникает когда запросы идут...

200
Перемешивание блоков с данными из БД при каждом обновлении страницы

Перемешивание блоков с данными из БД при каждом обновлении страницы

Помогите, пожалуйста, сделать рандомное перемешивание блоков с данными из БД при каждом обновлении страницы

257