我一直在寻找将数据发送到Web表单或Web服务(主要是php服务器)的方法,但是不赞成使用的方法有很多答案,我必须在表单中发布单个值,并编写另一个更详细的Web服务。
因此,有3个问题:
我想知道是否有可能以表格形式发布数据并提交,以及是否有可能做到这一点。表单不是Web服务,而是用户输入(this one)的表单。
如何正确使用HttpUrlConnection调用Web服务(发布数据并获取响应),Web服务可以使用JSON或简单的2个字符串值(例如用户和密码)。
基本上,这是我找到的代码:
private class PostTask extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
HttpURLConnection conn=null;
try {
URL url = new URL(params[0]);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
//conn.setReadTimeout(10000);
//conn.setConnectTimeout(15000);
//conn.setDoInput(true);
String body = "4";
conn.connect();
OutputStream output = new BufferedOutputStream(conn.getOutputStream());
output.write(body.getBytes());
output.flush();
} catch (Exception e) {
e.printStackTrace();
}finally {
assert conn != null;
conn.disconnect();
}
return true;
}
}
最佳答案
是的,可以使用params
以url HttpUrlConnection
的形式从表单传递数据。
你差不多了
在GET请求中,参数作为URL的一部分发送。
在POST请求中,参数作为请求的正文发送,
在标题之后。
做到的方式:
public void sendForm(String formParam1, String formParam2, String formParam3){
String urlParameters = "param1="+formParam1+"¶m2="+formParam2+"¶m3="+formParam3;
try {
byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
String request = "http://sicenet.com.mx/ws/index.php/inicio/editar_clave";
URL url = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try(DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
wr.write( postData );
}
}catch (Exception e){
e.printStackTrace();
}
}
未经测试是否可以正常工作。
在此StackOverFlow answer中找到