Запрос API получает правильный ответ через почтальона, но запрос curl на стороне сервера получает нулевой ответ - PullRequest
0 голосов
/ 20 декабря 2018

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

  • Часть "a" - это мое тело запроса скручивания.

  • Часть "b"это бэкэнд моего сайта, который включает в себя запрос скручивания.

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

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

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

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: ---- это мой почтальон и ответ на мой запрос:

enter image description here

1 Ответ

0 голосов
/ 20 декабря 2018

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

...