如何使用 HttpURLConnection 在 android 和 java 中正确 post url
How to properly post url in android with java using HttpURLConnection
我尝试使用 HttpURLConnection 向我的本地 (xampp) 服务器发送 post 请求,其中 url 像这样 http://xxx.xxx.0.3/Company/index.php/booking/c200/p-205/2025-02-09 8:2
,服务器 php 文件在 url 中获取参数并将数据发送到 mysql 数据库。
url 在 postman agent 上工作正常,甚至另一个 get 方法请求在 android 应用程序中工作顺利。
然而,当我使用以下代码尝试 post 方法时:
public void postOrder() {
TextView tv = findViewById(R.id.tv1);
Thread t = new Thread( new Runnable() {
@Override
public void run() {
HttpURLConnection conn = null;
try {
String link = "http://xxx.xxx.0.3/Company/index.php/booking/c200/p-205/2025-02-09 8:2";
URL url = new URL(link);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setReadTimeout(10000 /*ms*/);
conn.setConnectTimeout(15000 /*ms*/);
conn.connect();
}
catch (IOException e) {
Log.d("HTTP error: ", e.toString());
}
finally {
conn.disconnect();
}
}
} );
t.start();
}
它从未发送 url 因此没有数据存储到数据库。
经过 6 小时的反复试验,google 和搜索,我添加了这行代码:
InputStream is = conn.getInputStream();
终于成功了。
请回答我为什么只有添加这行代码后它才有效,它有什么作用?我认为 url 是在 conn.connect();
之后触发的
调用 connect()
只连接,但还没有发送任何东西。调用getResponseCode()
强制发送请求。该方法比 getInputStream()
更安全,后者会在响应不是 2xx 时抛出异常(在这种情况下您需要 getErrorStream()
)。
我尝试使用 HttpURLConnection 向我的本地 (xampp) 服务器发送 post 请求,其中 url 像这样 http://xxx.xxx.0.3/Company/index.php/booking/c200/p-205/2025-02-09 8:2
,服务器 php 文件在 url 中获取参数并将数据发送到 mysql 数据库。
url 在 postman agent 上工作正常,甚至另一个 get 方法请求在 android 应用程序中工作顺利。
然而,当我使用以下代码尝试 post 方法时:
public void postOrder() {
TextView tv = findViewById(R.id.tv1);
Thread t = new Thread( new Runnable() {
@Override
public void run() {
HttpURLConnection conn = null;
try {
String link = "http://xxx.xxx.0.3/Company/index.php/booking/c200/p-205/2025-02-09 8:2";
URL url = new URL(link);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setReadTimeout(10000 /*ms*/);
conn.setConnectTimeout(15000 /*ms*/);
conn.connect();
}
catch (IOException e) {
Log.d("HTTP error: ", e.toString());
}
finally {
conn.disconnect();
}
}
} );
t.start();
}
它从未发送 url 因此没有数据存储到数据库。
经过 6 小时的反复试验,google 和搜索,我添加了这行代码:
InputStream is = conn.getInputStream();
终于成功了。
请回答我为什么只有添加这行代码后它才有效,它有什么作用?我认为 url 是在 conn.connect();
调用 connect()
只连接,但还没有发送任何东西。调用getResponseCode()
强制发送请求。该方法比 getInputStream()
更安全,后者会在响应不是 2xx 时抛出异常(在这种情况下您需要 getErrorStream()
)。