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
的內容,也是空的。
我在做什麼錯?提前致謝。
如果您訪問PC上的指定URL,它是否會執行302重定向?您可能需要在URL末尾指定一個尾部斜線。 – Jon
令人驚歎!這是問題所在。並立即解決它,當我在網址 – Trogvar
@Jon後添加尾部斜槓作爲答案; Trogvar接受回答:) – verbumSapienti