gpt4 book ai didi

php - 如何使用 HttpUrlConnection 通过 POST 传递参数

转载 作者:行者123 更新时间:2023-11-30 02:01:57 25 4
gpt4 key购买 nike

编辑:我发现将 OutputStreamWriter 包装在 BufferedWriter 中是导致问题的原因,因此去掉了包装器,我的 POST 通过了。仍然想知道为什么 BufferedWriter 是原因。

我提前道歉,因为我刚刚开始自学所有关于数据库、应用程序和服务器/数据库之间的通信以及 php 的知识。

其他类似的问题都没有给出答案。

在使用 HttpUrlConnection 从我的 android 应用程序向本地托管服务器上的 php 脚本进行简单的 POST 时,我无法辨别我遗漏了什么。我需要从 android 应用程序中获取一个用户 ID,将其作为参数传递给 php 脚本,然后在名为 users 的数据库表中执行该 ID 的查找。我还想使用未弃用的方法和类。

我在 android list 中包含了 Internet 权限。我正在使用 XAMPP,我已经验证我的服务器正在运行,如果我通过网络浏览器访问 url,我会得到我正在寻找的 JSON 响应。

我唯一的 logcat 消息是 IOException,它发生在写入输出流之后。 编辑: 具体的异常是“流的意外结束”

这是我的 AsyncTask 类中的代码:

protected String doInBackground(String... params) {

String userID = params[0];
Pair<String, String> phpParameter = new Pair<>("userID", userID);
String result = "";

try {
URL url = new URL("url of locally-hosted php script");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

// prepare request
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setFixedLengthStreamingMode(userID.getBytes("UTF-8").length);

// upload request
OutputStream outputStream = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(outputStream, "UTF-8"));
writer.write(phpParameter.first + "=" + phpParameter.second);
writer.close();
outputStream.close();

// read response
BufferedReader in = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));

String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) { response.append(inputLine); }
in.close();

result = response.toString();

// disconnect
urlConnection.disconnect();
} catch (MalformedURLException e) {
Log.e("Malformed URL Exception", "Malformed URL Exception");
} catch (IOException e) {
Log.e("IOException", "IOException");
}

return result;
}

这是我在服务器上的 php 脚本。我还需要一些关于准备好的语句的帮助,所以不要因为“id = 1”而打败我:

<?php

mysql_connect("host","username","password");

mysql_select_db("Database");

print($_POST);

$sql = mysql_query("select * from users where id = 1");

while($row = mysql_fetch_assoc($sql))
$output[] = $row;

print(json_encode($output)); // this will print the output in json
mysql_close();

?>

最佳答案

从安卓发布:

public class HttpURLConnectionHandler
{
protected String urlG = "http://192.168.43.98/yourdirectory/";
public String sendText(String text)
{
try {
URL url = new URL(urlG+"receiveData.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// para activar el metodo post
conn.setDoOutput(true);
conn.setDoInput(true);
DataOutputStream wr = new DataOutputStream(
conn.getOutputStream());
wr.writeBytes("mydata="+text);
wr.flush();
wr.close();

InputStream is = conn.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
}
catch(Exception e){ return "error";}
}
}

php文件:

$x = $_POST['mydata'];
echo $x;

关于php - 如何使用 HttpUrlConnection 通过 POST 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324156/

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