表单提交中get和post方式的区别有5点
- 1.get是从服务器上获取数据,post是向服务器传送数据。
- 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
- 3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
- 4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
- 5.get安全性非常低,post安全性较高。
private String doPost() {
String jsonResult = "";// 返回的结果
String uri = "http://192.168.*.*:8080/*/*/myHomework.jhtml";
/** 第一步: 建立HttpPost对象 */
HttpPost request = new HttpPost(uri);
/** 第二步: NameValuePair实现请求参数的封装 */
List<NameValuePair> parms = new ArrayList<NameValuePair>();
parms.add(new BasicNameValuePair("stid","265B15A1-6117-4472-992F-259CAB8077D7"));
parms.add(new BasicNameValuePair("cid","30884C87-AE81-4182-93B6-B81D3F451592"));
/** 第三步: 添加请求参数到请求对象 */
try {
request.setEntity(new UrlEncodedFormEntity(parms, HTTP.UTF_8));
/** 第四步: 发送请求并等待响应 */
HttpResponse response = new DefaultHttpClient().execute(request);
/** 第五步: 判断状态码为200 ok */
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/** 第六步: 读取返回数据,如果有异常,记录异常信息 */
jsonResult = EntityUtils.toString(response.getEntity());
} else {
Log.e(TAG, response.getStatusLine().toString());
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return jsonResult;
}
或者 使用下面的方式:同样的,我们用一个例子来做分析,以熟悉各个方法的使用。
- A、使用Map来存储参数
Map<String, String> map = new HashMap<String, String>();
map.put("name", "ataaw");
map.put("password", "ataaw.com");
- B、使用DefaultHttpClient创建HttpClient实例
DefaultHttpClient httpClient = new DefaultHttpClient();
- C、构建HttpPost
HttpPost post = new HttpPost(“http://192.168.*.*:8080/*/*/myHomework.jhtml”);
- D、将由Map存储的参数转化为键值NameValue
List<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>();
for (Map.Entry<String, String> entry : map.entrySet()) {
postData.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
- E、使用编码构建Post实体
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData, HTTP.UTF_8);
- F、设置Post实体
post.setEntity(entity);
- G、执行Post方法
HttpResponse response = httpClient.execute(post);
- H、获取返回实体
HttpEntity httpEntity = response.getEntity();
- I、将H中返回实体转化为输入流
InputStream is = httpEntity.getContent();
- J、读取输入流
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
while((line=br.readLine())!=null){
sb.append(line);
}
以上就是Android中通过Post来实现客户端与服务端的通讯过程,完成参数封装到发送到服务器,最后接收服务端返回的数据,从而完成一个完整的HTTP数据传递过程。