@widget_pro

Правильно ли я сделал апи запрос?

У меня есть роут который обращается к контроллеру, в котором делается запрос:
public function makeRequestGetData() {
        $message = json_encode(
            array('user' => 1, 'data' => 'somedata')
        );
        $requestHeaders = [
            'Content-type: application/json'
        ];

        $ch = curl_init("http://localhost:9000/getdata/");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $message);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);

        $response = curl_exec($ch);
        curl_close($ch);

        var_dump($response);
    }

То есть по идее, я хочу, чтобы он обращался к роуту "/getdata", который вызывает контроллер
public function getdata(){
        try{
            $content = file_get_contents("php::/input");
            $content = json_decode($content);
            $answer = [
                'name' => 'testname',
                'userdata' => [
                    $content->data
                ]
            ];
            echo json_encode($answer,JSON_UNESCAPED_UNICODE);
        }catch (\Exception $e){
            echo json_encode($e);
        }
    }

То есть получает какую то информацию(в моем случае somedata), обрабатывает и выводит новый массив, обернутый в json_encode
Но вместо этого, при обращении к первому роуту, который делает запрос ко второму, у меня вызывается бесконечный запрос, что в постмане, что и в браузере
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ответы на вопрос 2
iMedved2009
@iMedved2009
Не люблю людей
Судя по порту используется Built-in php web server
А если взглянуть в доку, то можно увидеть одну простую вещь
The web server runs only one single-threaded process, so PHP applications will stall if a request is blocked.


и из этой цитаты следует что curl запрос к этому веб-сервер вызванный из реквеста к этому же серверу не выполнится никогда.
Ответ написан
@Siverius
А вот так если?
$response = curl_exec($ch);
if ($errno = curl_errno($ch)) {
	$message = curl_strerror($errno);
	echo "cURL error ({$errno}):\n {$message}";
}
curl_close($ch);
Ответ написан
Ваш ответ на вопрос

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

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