@serNevajno

Как отправить запрос методом GET по протоколу REST?

Здравствуйте, ув. сообщество. Помогите разобраться. Есть поставщик который отдает данные о товаре по протоколу REST. В описании поставщик указывает:
URL запроса,
HTTP метод : GET,
Заголовки запроса (request headers):
Authorization: Bearer [token]
Accept: application/json
Content-type: application/json

Параметры запроса:
kod_proizvoditelya ( массив содержащий список кодов товаров производителей)

Пробовал два варианта:
1-й
$opts = array(
    'http'=>array(
        'method'=> "GET",
        'header' => "Content-Type: application/json\r\n".
                    "Accept: application/json\r\n".
                    "Authorization: Bearer туттокен\r\n",
        'content' => array("kod_proizvoditelya=45346457"),
    )
);

$context = stream_context_create($opts);

$file = file_get_contents('https://урлсервера', false, $context);
$data = json_decode($file);
print_r($data);


2-й
class Dadata
{
    public function ApiPos($fields)
    {
        $result = false;
        if ($ch = curl_init("https://урлсервера"))
        {
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json',
                'Accept: application/json',
                'Authorization: Bearer туттокен'
            ));
            curl_setopt($ch, CURLOPT_HTTPGET, 1);
            // json_encode
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
            $result = curl_exec($ch);
            $result = json_decode($result, true);
            curl_close($ch);
        }
        return $result;
    }
}
$result = Dadata::ApiPos(array("kod_proizvoditelya" =>array( "5745745")));
print_r($result);

В этом случае возвращает Array ( [name] => Forbidden [message] => Доступ запрещен [code] => 0 [status] => 403 )

Подскажите, что не так делаю?
  • Вопрос задан
  • 3013 просмотров
Пригласить эксперта
Ответы на вопрос 4
public function ApiPos($fields)
{
  $ch = curl_init($serverUrl. '?' .http_build_query($fields));
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json',
    "Authorization: Bearer {$token}"
  );
  $result = curl_exec($ch);
  $result = json_decode($result, true);
  curl_close($ch);
  return $result;
}
Ответ написан
Комментировать
@n-fom
Попробуй для начала выполнить операцию через rest console
Например: https://chrome.google.com/webstore/detail/rest-con...
Ответ написан
Комментировать
alexfilus
@alexfilus
Senior backend developer
Попробуйте через Postman добиться того, чтобы на запрос возвращался правильный ответ, а потом уже переносите в код и отправляйте через curl.
Ответ написан
Комментировать
Rastishka
@Rastishka
function dadata($url, $data) {
    $options = [
        'http' => [
            'method'  => 'POST',
            'header'  => [
                'Content-type: application/json',
                'Authorization: Token ' . DADATA_TOKEN,
                'X-Secret: ' . DADATA_SECRET,
            ],
            'content' => json_encode($data),
        ],
    ];
    $context = stream_context_create($options);
    $contents = file_get_contents($url, false, $context);
    return json_decode($contents)[0];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы