Запрос api получает правильный ответ через почтальона, но запрос curl на стороне сервера получает нулевой ответ

Вот 3 части моего кода:

  • Часть «а» - это тело моего запроса на завивание.

  • Часть «b» - это серверная часть моего веб-сайта, которая включает запрос на завивание.

  • Часть «c» является результатом этого запроса в почтальоне.

Я не получаю никаких ошибок, но получаю нулевой ответ. Не могли бы вы рассказать мне, в чем проблема, что я получаю нулевой ответ в моем браузере?

часть а: ----------------------------------

class API
{

    /**
    * @var string
     */

    private $ip = "http://localhost:5000";

    /**
     * @var string
     */
    private $baseUrl = "/M-Pages/Api";
    private $port;
    private $method;
    private $header;
    private $body;
    private $rout;
    private $curl;

    /**
     * API constructor.
     */
    public function __construct()
    {
        $this->curl = curl_init();
    }

    /**
     * @param $rout
     * @param $method
     * @param null $port
     * @param array $header
     * @param array $body
     */
    public function curlRequest($rout , $method = null , $port = null,$header = ["content-type: application/json"] , $body = [])
    {


        // set parameter of request
        $this->initRequestParameters($rout, $method, $port, $header, $body);

        // set option of request
        $this->initCurlOptions();

        // execute curl request and get result
        $response = curl_exec($this->curl);

        // get error of curl request
        $err = curl_error($this->curl);

        // close curl

        // check error of request
        if ($err) {
            //TODO :error change

            echo "CURL Error #:" . $err;//TODO: set custom error function
        } else {
            return $response;
            curl_close($this->curl);
       }
    }

    /**
     * @param $rout
     * @param $method
     * @param null $port
     * @param array $header
     * @param array $body
     */
    private function initRequestParameters($rout , $method , $port = null, $header = ["content-type: application/json"] , $body = []){

        $this->port = $port != null ? $port : "5000";
//        var_dump( $this->port );
        $this->method = $method != null ? strtoupper($method) : "GET";
//        var_dump( $this->method);
        $this->header = $header != [] ? $header :["content-type: application/json"];
//        var_dump($this->header);
        $this->body = $body != [] ? $body : [];
//        var_dump($this->body);
        $this->rout = $rout;
//        var_dump( $this->rout);
    }

    /**
     * @return resource
     */
    private function initCurlOptions()
    {

        switch ($this->method) {
            case "POST":
                $this->initPostRequestOption();
                break;
            case "GET":
                $this->initGetRequestOption();
                break;
        }

        return $this->curl;

    }

    private function initPostRequestOption()
    {

        curl_setopt_array($this->curl, array(CURLOPT_PORT => $this->port,
                CURLOPT_URL => $this->ip . $this->port . $this->baseUrl . $this->rout,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => $this->method,
                CURLOPT_HTTPHEADER => $this->header)
        );

//        var_dump( $this->ip . $this->port . $this->baseUrl . $this->rout);

    }
   private function initGetRequestOption()
    {
        curl_setopt_array($this->curl, array(CURLOPT_PORT => $this->port,
                CURLOPT_URL => $this->ip . $this->port . $this->baseUrl . $this->rout,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => $this->method,
                CURLOPT_HTTPHEADER => $this->header)
        );
    }

} 
part b:----------------------------
 $body = "{\n \"params\" : {\"user_name\":\"".$user_name . "\"}}";
//                var_dump($body);
                $this->api = \DI::mapClass("API", "API", $GLOBALS["namespace"]["service"]);
//                echo 'api FIRST';
                $res = $this->api->curlRequest("/First/login","POST",[],[], $body);
                $res = json_decode($res, true);
                var_dump($res);
                exit();

часть c: ---- это среда моего почтальона и ответ на мой запрос:

Запрос api получает правильный ответ через почтальона, но запрос curl на стороне сервера получает нулевой ответ

Что такое $resдо и json_decode? Если json_decode не может декодировать, он возвращает ноль.

Jonnix 20.12.2018 15:52

$ res - это $ ответ на запрос curl. это null, но почему? он работает в почтальоне, и весь шаг истинен. mr. @JonStirling

Fatemeh_torki 20.12.2018 16:08

Вы переопределяете $res См. $res = $this->api->curlRequest("/First/login","POST",[],[], $body); $res = json_decode($res, true); Итак, что вы говорите, это ноль?

Jonnix 20.12.2018 16:10

Оба они равны нулю @JonStirling

Fatemeh_torki 20.12.2018 16:16

Долгая перспектива, но у меня были расширения / плагины браузера, которые съедали мои данные json / xml и показывали null. Возможно, попробуйте выполнить мониторинг с помощью инструментов разработчика, попробуйте другой браузер или отключите все расширения.

xhermit 20.12.2018 17:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
687
1

Ответы 1

Я не специалист по PHP, поэтому этот ответ может быть совершенно неправильным, но похоже, что вы сопоставляете службу с определенным API с помощью $this->api = \DI::mapClass("API", "API", $GLOBALS["namespace"]["service"]);. Я понимаю, что у вас есть API класса, но в почтальоне вы отправляете POST на API / Сначала / войдите (обратите внимание на заглавные буквы), что также отражено в вашем коде. Может быть, это опечатка, из-за которой ваш запрос на завиток оказался нулевым? Следует ли в этой строке читать $this->api = \DI::mapClass("API", "Api", $GLOBALS["namespace"]["service"]);?

эта строка $ this-> api = \ DI :: mapClass ("API", "Api", $ GLOBALS ["пространство имен"] ["служба"]) равна whit ($ this-> api = new Api ();), после того, как этот класс api построен, вызовите метод curlRequest и передайте ему параметр. @Davenporten

Fatemeh_torki 20.12.2018 16:36

Должен ли curlRequest что-то возвращать? @Fatima

Davenporten 20.12.2018 16:48

да, он должен вернуть {"status": 200, "response": {"doc_fname": "اطمه", "doc_lname": "ترکی", "doc_pass": "$ 2a $ 10 $ f4e828d7376550ef12aa0u6p2 / Yo0Lh91zeNHJa56ZwCyku}" G0Lh91zeNHJa56ZwCyku}, но ответ в браузере нулевой !!!! @Davenporten

Fatemeh_torki 20.12.2018 16:57

Я имею в виду собственно функцию. У вас есть оператор return в else if ($ err), но ничего, если это ошибка. Возможно, вам просто не хватает эха, но попробуйте вернуть $ err и посмотреть, что у вас получится. @Fatima

Davenporten 20.12.2018 17:26

Другие вопросы по теме