Этот вопрос закрыт для ответов, так как повторяет вопрос Как отправить HTTP запрос методом POST на URL через PHP?
@NinjaNickName
Web разработчик

Как сделать POST запрос через file_get_contents?

Почему POST запрос с помощью Curl работает, а с помощью file_get_contents нет?

C Curl делаю так:

<?php
	$curl = curl_init();
			curl_setopt($curl, CURLOPT_URL, $url);
			curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
			curl_setopt($curl, CURLOPT_POST, 1);
			curl_setopt($curl, CURLOPT_POSTFIELDS, $requestParams);

			$result = curl_exec($curl);
			curl_close($curl);
			
			$response = new \RegRuAPI\Response($result);

С этим все ок, работает как нужно.

с file_get_contents делаю так:

$context = stream_context_create(array(
			'http' => array(
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL,
            'content' => $requestParams,
			),
		));
	
		$result = file_get_contents($url, false, $context);

Запрос идет, но переданные данные не учитываются, получаю ошибку:
object(RegRuAPI\Response)#7 (4) {
  ["status"]=>
  string(5) "error"
  ["error_code"]=>
  string(7) "NO_AUTH"
  ["error_text"]=>
  string(35) "No authorization mechanism selected"
  ["error_params"]=>
  object(stdClass)#9 (1) {
    ["command_name"]=>
    string(13) "domain/create"
  }
}


В обоих случаях массив параметров выглядит так:

array(6) {
  ["show_input_params"]=>
  int(0)
  ["input_format"]=>
  string(4) "json"
  ["output_format"]=>
  string(4) "json"
  ["io_encoding"]=>
  string(4) "utf8"
  ["lang"]=>
  string(2) "ru"
  ["input_data"]=>
  string(54) "{"currency":"RUR","username":"test","password":"test"}"
}
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
context должен быть строкой, а не массивом.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы