2014-09-30 2 views
0

Я пытался отправить POST-запрос на URL-адрес из моего приложения Android, но все, что я получаю, это пустой $ _POST. Вот мой код, он работает внутри Asynctask. Я посмотрел на несколько вопросов, подобных этому в StackOverflow, но ни один из них не мог мне помочь.

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php"); 

try { 
     List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
     pairs.add(new BasicNameValuePair("id", "12345")); 
     pairs.add(new BasicNameValuePair("name", "John")); 
     pairs.add(new BasicNameValuePair("post", "test123")); 
     post.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8)); 

     post.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

     HttpResponse response = httpClient.execute(post); 

     String text = EntityUtils.toString(response.getEntity()); 
     System.out.println("STATUS CODE " + response.getStatusLine().getStatusCode()); 
     System.out.println("RETURN " + text); 

} catch (ClientProtocolException e) { 
     System.out.println("ERROR1: " + e.getStackTrace()); 
} catch (IOException e) { 
     System.out.println("ERROR2: " + e.getStackTrace()); 
} 

На стороне сервера у меня есть тестирование тестового скрипта PHP, если переменная $ _POST в порядке.

<?php echo "ISSET = " . isset($_POST["id"]) . isset($_POST["name"]) . isset($_POST["post"]); ?> 

Все, что я получаю это не набор $ _POST

STATUS CODE 200 
RETURN ISSET = 

Я не получаю предупреждение об ошибке и приложение не врезаться.

Я пытался поставить переменные как запрос GET, прикрепленного к URL и изменил мой PHP-файл, чтобы обработать запрос на $ _GET:

HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php?id=1234&name=John&post=test123"); 

Он работал отлично. Я мог бы читать все переменные $ _GET в скрипте PHP. Но мне нужно, чтобы это был запрос POST.

У меня есть разрешение INTERNET в моем AndroidManifest.xml. В этом же приложении я делаю запросы на другой скрипт PHP, и он работает так, как ожидалось.

<uses-permission android:name="android.permission.INTERNET" /> 

Любые мысли?

+0

Пожалуйста, сделайте var_dump ($ _ POST) для отладки. – VM4

+0

Не совсем решение, но скорее предложение: библиотека Apache HTTP в android [очень старая и не поддерживается] (http://android-developers.blogspot.co.il/2011/09/androids-http-clients.html). Вам лучше использовать HttpsUrlConnection или библиотеку, такую ​​как модернизация. – Eran

+0

Когда я делаю var_dump ($ _ POST), я получаю «RETURN array (0) {}» – emedrado

ответ

0

Если ваш URL-адрес HttpPost имеет «www», удалите его и попробуйте. Если не добавить www.

Потому что, возможно, вы перенаправлены yoursite.com в www.yoursite.com или наоборот. В таких случаях URL-адрес HttpPost должен быть URL-адресом назначения, а не URL-адресом перенаправления. Параметры будут потеряны во время процесса перенаправления HTTP и будет выполнен пустой POST. Вот почему сервер не получает ваши данные.

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