@9StarRu

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

У Яндекса нашел образец POST запроса, а отправить его не могу, получаю bool(false)

Вот, что предлагает Яндекс:

Тело запроса

{
"board_id": string,
"content": [
{
"source": {
"url": string
},
"source_type": string
}
],
"description": string,
"source_meta": {
"page_domain": string,
"page_title": string,
"page_url": string
}
}


Отправить пытаюсь так:

<?php
$body = '{
  "board_id": 3e5005e000000000092c234,
  "content": [
    {
      "source": {
        "url": https://site.ru/123934.jpg
      },
      "source_type": image
    }
  ],
  "description": Описание карточки. Максимальная длина описания — 2048 символов.,
  "source_meta": {
    "page_domain": site.ru,
    "page_title": Заголовок страницы с контентом,
    "page_url": https://site.ru
  }
}';

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => "Host: api.collections.yandex.net\r\n".
    "Authorization: OAuth AgAAAAAAAAAAAAAAAADDDDDDDD3jHzZ8\r\n".
    "Content-Type: application/json; charset=utf-8\r\n".
    "Accept: application/json\r\n",
    'content' => $body
  )
);
                   
$context  = stream_context_create($opts);
$url = 'https://api.collections.yandex.net/v1/cards/?as_company=my_company';
$result = file_get_contents($url, false, $context);


Документация

Где я ошибся? Как верно отправить запрос?

Спасибо!
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
New_Horizons
@New_Horizons
Бред:
json невалидный, как минимум. Такие вещи руками лучше не делать, большая вероятность ошибиться. Лучше формировать массив и перегонять его в json. Так-же лучше использовать curl вместо file_get_contents (в идеале guzzle, но это уже другая история).

код

$data = [
	'board_id' => '3e5005e000000000092c234',
	'content' => [
		'source' => [
			'url' => 'https://site.ru/123934.jpg'
		],
		'source_type' => 'image',
	],
	'description' => 'Описание карточки. Максимальная длина описания — 2048 символов.',
	'source_meta' => [
		"page_domain" => 'site.ru',
		"page_title" => 'Заголовок страницы с контентом',
		"page_url" => 'https://site.ru'
	]
];

$curl = curl_init();

curl_setopt_array($curl, [
	CURLOPT_URL => 'https://api.collections.yandex.net/v1/cards/?as_company=my_company',
	CURLOPT_FOLLOWLOCATION => true,
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_POST => true,
	CURLOPT_POSTFIELDS => json_encode($data),
	CURLOPT_HTTPHEADER => [
		'Authorization: OAuth AgAAAAAAAAAAAAAAAADDDDDDDD3jHzZ8',
		'Content-Type: application/json; charset=utf-8',
		'Accept: application/json',
	],
]);

$result = curl_exec($curl);

var_dump($result);
var_dump(curl_error($curl));


Последняя строка это как посмотреть ошибки, на случай если что-то не так. Ну и наверное заменить параметры типа "my_company", тут уж не знаю специфики яндекса. В любом случае, надо смотреть ответ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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