2013-07-08 39 views
1

由於我在某些業餘時間通過我的Android學習進展,我遇到了HttpPost請求的奇怪行爲。發送來自Android的HttpPost請求,請閱讀Post Post from PHP

我想要實現: 請從Android應用程序到Apache Web服務器我的開發PC上運行一個簡單的POST請求,並顯示從PHP腳本發佈的數據,其形式發送。

我的Android應用程序的Java代碼駐留在Activity內爲AsyncTask如下:

private class DoSampleHttpPostRequest extends AsyncTask<Void, Void, CharSequence> { 

    @Override 
    protected CharSequence doInBackground(Void... params) { 
     BufferedReader in = null; 
     String baseUrl = "http://10.0.2.2:8080/android"; 

     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost request = new HttpPost(baseUrl); 

      List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("login", "someuser")); 
      postParameters.add(new BasicNameValuePair("data", "somedata")); 
      UrlEncodedFormEntity form = new UrlEncodedFormEntity(postParameters); 
      request.setEntity(form); 

      Log.v("log", "making POST request to: " + baseUrl); 

      HttpResponse response = httpClient.execute(request); 

      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 

      return sb.toString(); 
     } catch (Exception e) { 
      return "Exception happened: " + e.getMessage(); 
     } finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    @Override 
    protected void onPostExecute(CharSequence result) { 
     // this refers to a TextView defined as a private field in the parent Activity 
     textView.setText(result); 
    } 

} 

PHP代碼如下:

<?php 
echo "Hello<br />"; 
var_dump($_SERVER); 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    echo "Page was posted:<br />"; 
    foreach($_POST as $key=>$var) { 
     echo "[$key] => $var<br />"; 
    } 
} 
?> 

而且最後的問題 : 正如你所見,$_SERVER內容被轉儲,並且在輸出$_SERVER["REQUEST_METHOD"]的值爲GET,儘管事實上我實際上正在提出POST請求。即使我嘗試轉儲$_POST的內容,也是空的。

我在做什麼錯?提前致謝。

+1

如果您訪問PC上的指定URL,它是否會執行302重定向?您可能需要在URL末尾指定一個尾部斜線。 – Jon

+0

令人驚歎!這是問題所在。並立即解決它,當我在網址 – Trogvar

+1

@Jon後添加尾部斜槓作爲答案; Trogvar接受回答:) – verbumSapienti

回答

2

您可能需要在URL末尾指定一個尾部斜線。

通常Apache會重定向不以尾部斜線結尾的請求,以便它們包含尾部斜線。該重定向是一個GET重定向(沒有一些調整),所以所有的POST數據都會丟失。