POST-запрос не приходит должным образом httpClient - ionic - php - PullRequest
0 голосов
/ 10 марта 2019

Я создаю REST API в PHP.Служба login:

<?php

include_once 'libs/Database.php';

header("Content-Type: application/json; charset=UTF-8");


Database::getPDO();
$myObj = null;
if ( Database::check($_POST['username'], $_POST['password']) ) {
    $myObj = array('message' => "Verified", 'success' => true);
} else {
    $myObj = array('message' => "Unauthorized", 'username' => $_POST['username'], 'success' => false);
}

$myJSON = json_encode($myObj);

echo $myJSON;
?>

И, как вы видите, я обращаюсь к глобальной переменной $_POST.

  • Почтальон: отправка запроса POST с заголовком x-www-form-urlenconded и указав ключи и значения, сервер захватывает такие ключи.
  • Ionic: отправка запроса POST с использованием HttpClient не будет работать.(Сервер захватывает null для обоих ключей, username и password).

Это код провайдера:

  login(user, pass, url) {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/x-www-form-urlencoded'
      })
    };
    return this.http.post(url, "username="+user+"&"+"password="+pass, httpOptions);
  }

Мне интереснокак body должен быть отформатирован, и в соответствии с эта ссылка должна быть такой же, как я сделал (username = user & password = pass).Кстати, при вызове функции login все параметры не равны NULL, следовательно, проблема в запросе.

Для тех, кто заинтересован, ответ сервера:

{message: "Unauthorized", username: null, success: false}

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 10 марта 2019

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

Предполагая, что вы используете HttpClient от Angular, попробуйте указать, какой тип вы отправляете через POST: попробуйте сделатьчто-то вроде this.http.post<string>(url, 'string', opts);.

Я также предлагаю вам посмотреть, что вы отправляете в качестве запроса через Chrome's Inspector ( F12 в Windows / Linux, Cmd + Параметры + I на Mac), вкладка Сеть.

Очевидно, что вы должны открыть его перед отправкой запроса на захват DevTools.Если вы выполняете отладку напрямую через телефон, в Windows / Linux вы можете использовать вкладку «Удаленные устройства» в Chrome DevTools или Safari на Mac.

Пример использования Chrome DevTools:

...