1.HttpClient
HttpClient 是Apache Jakarta Common 下的子项目,在android中已经集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
2.为什么要使用HttpClient?
相较于HttpURLClient而言,使用HttpClient更加简单,方便开发
3.get方法和post的介绍和区别
3-1:get方法和post方法是基于http协议的访问服务器的最常见的两种方法,通过该方法可以实现对于服务器的访问,同时,可以得到从服务器反馈的数据进行分析
3-2:区别
1.get是从服务器上获取数据,post是向服务器传递数据 2.get是把相应的参数数据队列添加到指定的URL中,参数的值和参数名的各个字段一一对应 并且在URL中可以看见(正因为此,所以安全性很差) post是通过HTTPpost机制,通过输出流的形式,将请求的参数名和参数值放置在HTML HEADER内一起传输到指定的URL地址,用户看不到过程 3.get方式而言,服务器用Request.QueryString获取变量值,对于post方式,服务器端用Request.From方法获取提交的诗句 4.get传输数据的量比较小,不能大于2kb,post方法中传输的数据量较大,一般默认为不受限制,但是理论上而言,IIS4中最大为80kb,IIS5中为100KB 5.get安全性很低,post较高
3-3:如何在HttpClient使用get和post方法
get:1.拼接URL 2.构建客户端实现发送get请求以及指令(同时得到反馈值) 3.通过对应的Util,将返回的实体变为String类型的返回信息
code:
package com.example.httpgetandhttppost;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HTTPGET {
public void Get(String s) {
//使用Http内置的功能实现get请求
String urlAdress = "*******";//访问服务器的网址
String method = "********";//需要什么方法
String getUrl = urlAdress + method + "?way=" + s;
HttpGet httpGet = new HttpGet(getUrl);
//开始进行http get请求的发送
try {
//构建一个默认的客户端进行发送拼接好的htto请求
HttpResponse response = new DefaultHttpClient().execute(httpGet);
//服务器反馈的信息
if (response.getStatusLine().getStatusCode() == 200) {
String responseDetails = EntityUtils.toString(response.getEntity());//将返回的实体转化为字符串
Log.d("Msg From Server", responseDetails);
} else {
Log.d("Msg From Server", "ERROR");
}
} catch (IOException e) {
e.printStackTrace();
}
}
post:
package com.example.httpgetandhttppost;
import android.provider.Settings;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.NamespaceContext;
public class HTTPPOST {
String urlAdress = "*******";//访问服务器的网址
String method = "********";//需要什么方法
String getUrl = urlAdress + method ;
public void post(String s){
//开始构建前缀
HttpPost httpPost=new HttpPost(urlAdress+method);
//构建键值对
List<NameValuePair>params=new ArrayList<>();
params.add(new BasicNameValuePair("way",s));//构建键值对成功
//进行键值对封装
try {
httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));//封装参数
HttpResponse response=new DefaultHttpClient().execute(httpPost);//实现从服务器中获取回复信息
if(response.getStatusLine().getStatusCode()==200){
String result=EntityUtils.toString(response.getEntity());//response会返回一个实体,使用适当的工具类将其转化为String
Log.d("TAG",result);
}else{
Log.d("TAG","Failed");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注:HttpClient中的get和post请求需要在异步线程中实现,如需要改变ui,需要使用Handler或继承AsyncTask在子线程和主线程之间实现联系;