Как отправить 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¶ms=...
Пробую сделать так:
<?
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 в описании изменены. Может ли не проходить авторизация из-за того что я выполняю запрос со стороннего сайта?
Поскольку 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);
Виртуальный выделенный сервер (VDS) становится отличным выбором
здравствуйте, я установил на свой сервер OPcache (использую связку apache+nginx), после установки, добавил в конфиг пару строк (я взял их из рекомендаций...
Да, при работе с моделями можно использовать $this->setReadConnectionService('dbSlave') и $this->setWriteConnectionService('dbMaster'), но сложность возникает когда запросы идут...
Помогите, пожалуйста, сделать рандомное перемешивание блоков с данными из БД при каждом обновлении страницы