2011-07-04 4 views
1

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

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

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

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

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

EDIT: нашел проблему благодаря Шона ниже. «Content-Type» был установлен неправильно, и это привело к тому, что фактические значения не достигли PHP-кода. Как ни странно, заголовки пустой заявки - это то, к чему я их установил. Почему данные будут удалены?

+0

Покажите нам свою свалку. Я подозреваю, что вы на самом деле не генерируете заголовки правильно. – Brad

+2

Вы проверили, пуст ли $ _GET? – vascowhite

+0

@vascowhite: В этом случае $ _REQUEST тоже не был бы пуст. –

ответ

3

Убедитесь, что ваш клиент 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"); 
+0

На самом деле я столкнулся с этой проблемой, когда писал приложение iOS, связанное с приложением Microsoft ASP.NET. –

+0

Вы правы! Тип контента был неправильным.Правильная настройка делает его работу. – user220201

1

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

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

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

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

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

Удачи вам!

Смежные вопросы