gpt4 book ai didi

java - 从 Android 发送 HttpPost 请求,从 PHP 读取 Post

转载 作者:可可西里 更新时间:2023-11-01 17:10:44 25 4
gpt4 key购买 nike

当我在业余时间学习 Android 时,我遇到了一个奇怪的 HttpPost 请求行为。

我想要实现的目标:从 Android 应用程序向我的开发 PC 上运行的 Apache 网络服务器发出一个简单的 POST 请求,并显示表单发送到的 PHP 脚本的 POST 数据。

我的 Android 应用程序的 Java 代码 作为 AsyncTask 驻留在 Activity 中,如下所示:

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 的内容,它也是空的。

我做错了什么?提前致谢。

最佳答案

您可能需要在 URL 末尾指定一个尾部斜杠。

Apache 通常会重定向未以尾部斜杠结尾的请求,以便它们确实包含尾部斜杠。该重定向是 GET 重定向(没有进行一些调整),因此所有 POST 数据都将丢失。

关于java - 从 Android 发送 HttpPost 请求,从 PHP 读取 Post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17525632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com