Вот 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: ---- это среда моего почтальона и ответ на мой запрос:
$ res - это $ ответ на запрос curl. это null, но почему? он работает в почтальоне, и весь шаг истинен. mr. @JonStirling
Вы переопределяете $res См. $res = $this->api->curlRequest("/First/login","POST",[],[], $body); $res = json_decode($res, true); Итак, что вы говорите, это ноль?
Оба они равны нулю @JonStirling
Долгая перспектива, но у меня были расширения / плагины браузера, которые съедали мои данные json / xml и показывали null. Возможно, попробуйте выполнить мониторинг с помощью инструментов разработчика, попробуйте другой браузер или отключите все расширения.






Я не специалист по 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
Должен ли curlRequest что-то возвращать? @Fatima
да, он должен вернуть {"status": 200, "response": {"doc_fname": "اطمه", "doc_lname": "ترکی", "doc_pass": "$ 2a $ 10 $ f4e828d7376550ef12aa0u6p2 / Yo0Lh91zeNHJa56ZwCyku}" G0Lh91zeNHJa56ZwCyku}, но ответ в браузере нулевой !!!! @Davenporten
Я имею в виду собственно функцию. У вас есть оператор return в else if ($ err), но ничего, если это ошибка. Возможно, вам просто не хватает эха, но попробуйте вернуть $ err и посмотреть, что у вас получится. @Fatima
Что такое
$resдо иjson_decode? Еслиjson_decodeне может декодировать, он возвращает ноль.