@Little_Junior

Почему получается неокрректный запрос?

function request($method = 'GET', $url = null, $params = null, $proxy = null, $proxy_userpwd = null)
{
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	if ($method == 'POST') {
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $params['params']);
	} elseif ($method == 'PATCH') {
		curl_setopt($ch, CURLOPT_POSTFIELDS, $params['params']);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
	} elseif ($method == 'PUT') {
		curl_setopt($ch, CURLOPT_PUT, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $params['params']);
	} else {
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
	}

	if (isset($params['headers'])) {
		curl_setopt($ch, CURLOPT_HTTPHEADER, $params['headers']);
	}

	if (isset($params['cookies'])) {
		curl_setopt($ch, CURLOPT_COOKIE, $params['cookies']);
	}

	if ($proxy) {
		curl_setopt($ch, CURLOPT_PROXY, $proxy);

		if ($proxy_userpwd) {
			curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_userpwd);
		}
	}

	$result = curl_exec($ch);

	$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
	$headers = substr($result, 0, $header_size);
	$content = substr($result, $header_size);

	preg_match_all('|Set-Cookie: (.*);|U', $headers, $parse_cookies);
	$cookies = implode(';', $parse_cookies[1]);

	curl_close($ch);

	return ['headers' => $headers, 'cookies' => $cookies, 'content' => $content];
}

$check = request('POST', 'https://sba.yandex.net/v4/threatMatches:find?key=<TOKEN>', [
	'params' => [
		'client' => ['clientId' => 'YaSfBrowsingAPI', 'clientVersion' => '1'],
		'threatInfo' => [
			'threatTypes' => ['THREAT_TYPE_UNSPECIFIED', 'MALWARE', 'SOCIAL_ENGINEERING', 'UNWANTED_SOFTWARE', 'POTENTIALLY_HARMFUL_APPLICATION'],
			'platformTypes' => ['ALL_PLATFORMS'],
			'threatEntryTypes' => ['URL'],
			'threatEntries' => [['url' => 'http://site.ru']]
		]
	], 'headers' => ['Content-type: multipart/form-data']
])['content'];


Документация: https://yandex.ru/dev/safebrowsing/doc/quickstart/...

Постоянно возвращает: The HTTP request was not correct formed. Not correct number of urls.
Уже всё перепробовал.
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@Little_Junior Автор вопроса
Разобрался, Яндекс хочет получать JSON.
$params = [
	'client' => ['clientId' => 'YaSfBrowsingAPI', 'clientVersion' => '1'],
	'threatInfo' => [
		'threatTypes' => ['THREAT_TYPE_UNSPECIFIED', 'MALWARE', 'SOCIAL_ENGINEERING', 'UNWANTED_SOFTWARE', 'POTENTIALLY_HARMFUL_APPLICATION'],
		'platformTypes' => ['ALL_PLATFORMS'],
		'threatEntryTypes' => ['URL'],
		'threatEntries' => [['url' => 'http://malware-driveby.test.safebrowsing.yandex']]
	]
];

$check = request('POST', 'https://sba.yandex.net/v4/threatMatches:find?key=<TOKEN>', [
	'params' => json_encode($params), 'headers' => ['Content-Type: application/json']
])['content'];
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
- $check = request('POST', 'https://sba.yandex.net/v4/threatMatches:find?key=<TOKEN>', ['params' => $params])['content'];
+ $check = request('POST', 'https://sba.yandex.net/v4/threatMatches:find?key=<TOKEN>', $params)['content'];
Ответ написан
Ваш ответ на вопрос

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

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