Данные POST не принимаются при удаленном вызове PHP-скрипта

#php #php-5.5

#php #php-5.5

Вопрос:

Я не получаю данные $ _POST в PHP-скрипте, когда он вызывается удаленно. Я попробовал это с помощью cURL и Postman.

Тип содержимого: форма-данные

curl --location --request POST 'http://example.com/backend.php?gateway=test' --form 'status=AP'

Я бы ожидал status в POST.

Ответ:

 2020-09-22 13:19:27

JSON POST:

REQUEST:
Array
(
    [gateway] => test
)

GET:
Array
(
    [gateway] => test
)

POST:
Array
(
)
  

Тип содержимого: application/x-www-form-urlencoded’

curl --location --request POST 'http://example.com/backend.php?gateway=test' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'status=AP'

Я бы ожидал status в POST.

Ответ:

 2020-09-22 12:59:00

JSON POST:

REQUEST:
Array
(
    [gateway] => test
)

GET:
Array
(
    [gateway] => test
)

POST:
Array
(
)
  

Тип содержимого: application / json ‘

curl --location --request POST 'http://example.com/backend.php?gateway=test' --header 'Content-Type: application/json' --data-raw '{ "status": "AP" }'

Я бы ожидал status в JSON POST.

Ответ:

 2020-09-22 13:20:43

JSON POST:

REQUEST:
Array
(
    [gateway] => test
)

GET:
Array
(
    [gateway] => test
)

POST:
Array
(
)
  

Вот код из backend.php

 <?php
header('Access-Control-Allow-Origin: *');

$json = file_get_contents("php://input");

echo '<pre>';
echo date('Y-m-d H:i:s') . "n";
echo "n";
echo "JSON POST:n";
if ($json) {
    print_r(json_decode($json, true));
}
echo "n";
echo "REQUEST:n";
print_r($_REQUEST);
echo "n";
echo "GET:n";
print_r($_GET);
echo "n";
echo "POST:n";
print_r($_POST);
  

Ожидается, что он работает на локальном хосте, но не на производстве. Рабочая версия PHP — 5.5.38.

Комментарии:

1. Попробуйте использовать X вместо request . например, ` -X POST`

2. активен ли rewriterule (возможно, для изменения URL-адреса с http на https или для добавления WWW к имени домена)? Это изменило бы POST на GET

3. @IvoP Ах да, это из-за https. Переход на https работает. Спасибо.

Ответ №1:

странно. это должно работать так, как вы пытаетесь. можете ли вы попробовать это:

 curl -d "status=AP" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://example.com/backend.php?gateway=test