Невозможно отправить POST-переменные в php-скрипт на localhost с помощью Postman
Я разрабатываю клиентскую часть веб-приложения в iOS / Swift и сейчас тестирую часть, которая взаимодействует с сервером. Я устанавливаю основной сайт на localhost по адресу:
http://localhost/~username/ConnectivityTest/login
(что соответствует/Users/username/Sites/ConnectivityTest/login
в файловой системе моего Mac).
Скрипт серверной части (index.php
в каталоге выше) есть:
<?PHP
$userId = $_POST["userId"];
$password = $_POST["password"];
if (empty($userId) || empty($password)){
echo "Error: empty post variables";
}
else{
// Process credentials...
Я используюNSURLSession
API на iOS, но я заметил, что независимо от того, как я настраиваю свои запросы, даже если соединение успешно (т.е. возвращает http-код 200 и тело ответа в качестве данных),POST
переменные недоступны (пустые) на стороне сервера.
Поэтому я решил попробовать отправить запрос вручную с помощью Postman в браузере (чтобы исключить любые ошибки в моем коде iOS / Swift), но я не знаю, как мне его настроить (я не разбираюсь в HTTP, это меня все еще немного смущает)
Должен ли я установитьContent-Type
заголовок кapplication/json
, application/x-www-form-urlencoded
, или что?
Должен ли я отправить данные тела какform-data
, x-www-form-urlencoded
или жеraw
?
В Почтальоне я устанавливаю данные тела (необработанные) следующим образом:
{
"userId":"my-user-name",
"password":"123456"
}
Альтернативы, аform-data
, это:
userId my-user-name [Text]
password 12345 [Text]
Какx-www-form-urlencoded
, это:
userId my-user-name
password 12345
Все, что я пытаюсь, дает мне ответ"Error: empty post variables"
что я установил в пути ошибки моего кода (т.е.$_POST['userId']
или же$_POST['password']
пусты).
Если вместо этого я передаю переменные как параметры URL:
http://localhost/~username/ConnectivityTest/login/index.php?userId=my-user-name&password=12345
... и доступ к ним в сценарии как&_GET['userId']
а также$_GET['password']
работает нормально.
что мне не хватает?
ОБНОВИТЬ: Я создал файл HTML в том же каталоге, что и файл php:
<html>
<body>
<form action="index.php" method="post">
User name: <input type="text" name="userId"><br>
Password: <input type="text" name="password"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Если я загружу вышеуказанную страницу в браузер, заполните поля и отправьте форму,$_POST
переменные в моем PHP-скрипте получают правильные значения. Так что код php правильный, и я неправильно настраиваю свой запрос в Postman (до сих пор не знаю почему).
ОБНОВЛЕНИЕ 2: На случай, если возникла проблема с localhost, я переместил скрипт в общий хостинг wb, которым я управляю, но результат тот же.
ОБНОВЛЕНИЕ 3: Должно быть, я как-то пропустил это раньше, но есть ОДНА установка, с которой я начал работать:
Заголовки:Content-Type application/x-www-form-urlencoded
Кузов («сырой»):userId=my-user-name&password=123456
Тем не менее, это ограничивает меня плоскими списками ключ / значение; Если я хочу отправлять на сервер более структурированные (то есть вложенные) данные, мне нужна поддержка JSON ...