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

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

  • Часть «а» является моим телом запроса керла.

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

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

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

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

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

введите описание изображения здесь

1

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector