Переменная $ _POST пуста в php - PullRequest
1 голос
/ 04 июля 2011

Я видел здесь несколько постов с такой же проблемой, но ни один из них не такой простой, как мой, и, следовательно, пост.

Я новичок в php и вижу, что переменные $_POST и $_REQUEST пусты. Я могу получить заголовки, используя apache_request_headers(), и могу правильно видеть заголовки. Просто переменная $_POST пуста.

Мой клиент - приложение для Android, которое генерирует сообщение должным образом. Я использовал tcpdump, чтобы проверить это. Также логи apache показывают, что намеченный PHP вызывается. Я использую стандартную установку Apache 2.2.14 и PHP 5.2.12, ничего особенного.

Может кто-нибудь придумать причину, по которой переменная $_POST пуста?

Также я не использую класс в своем коде. Это просто простой код, который вызывает функции из других классов по мере необходимости. Я упоминаю об этом, потому что видел другой пост, в котором предлагается использовать $this->input->post(), но в моем случае это невозможно.

РЕДАКТИРОВАТЬ: Обнаружил проблему благодаря Шон ниже. «Content-Type» не был установлен должным образом, и это привело к тому, что фактические значения не достигли php-кода. Как ни странно, заголовки пустого запроса - это то, что я им установил. Почему данные будут удалены?

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Убедитесь, что ваш Android-клиент отправляет правильный тип контента на POST. Должно быть установлено значение application / x-www-form-urlencoded .

        url = new URL("your URL");
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestMethod("POST");
1 голос
/ 22 октября 2011

Во-первых, я бы проверил, что ваш сервер не перенаправляет ваши данные POST с кодом 301 «перемещен навсегда». Откройте файл журнала, чтобы проверить это. Если он работает хорошо, вы должны увидеть код 200 (или 201 в худшем случае). Вы заметите, что для каждого обращения к серверу будут генерироваться POST и GET-код. Убедитесь, что оба значения равны 200. Если только GET равен 200, а POST равен 301, то ваш сервер по какой-то причине перенаправляет сервер (например, вы звоните http://mysite.com,, но сервер перенаправляет на http://www.mysite.com).

Если вам нужно проверить GET без возвращаемого значения для Android, попробуйте что-то вроде этого, используя HttpPost в Android:

HttpPost httppost = new HttpPost("http://www.mysite.com?somevarname=somevalue");
httpclient.execute(httppost);

Затем со стороны сервера попробуйте сделать что-то вроде создания файла или чего-то еще, если присутствуют переменные GET.

Но если в вашем журнале есть код перенаправления как для GET, так и для POST, то вам нужно переопределить перенаправление с помощью .htaccess или настроить свой хост для остановки любого перенаправления.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...