URLConnection和HTTPClient的比较
来源:互联网 发布:哪些端口不是敏感端口 编辑:程序博客网 时间:2024/04/20 02:33
A Comparison of java.net.URLConnection and HTTPClient
Since java.net.URLConnection and HTTPClient have overlappingfunctionaliti
1.概念
2.区别
HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。
3.案例
URLConnection
- String urlAddress = "http://192.168.1.102:8080/AndroidServer/login.do";
- URL url;
- HttpURLConnection uRLConnection;
- public UrlConnectionToServer(){
- }
- //向服务器发送get请求
- public String doGet(String username,String password){
- String getUrl = urlAddress + "?username="+username+"&password="+password;
- try {
- url = new URL(getUrl);
- uRLConnection = (HttpURLConnection)url.openConnection();
- InputStream is = uRLConnection.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String response = "";
- String readLine = null;
- while((readLine =br.readLine()) != null){
- //response = br.readLine();
- response = response + readLine;
- }
- is.close();
- br.close();
- uRLConnection.disconnect();
- return response;
- } catch (MalformedURLException e) {
- e.printStackTrace();
- returnnull;
- } catch (IOException e) {
- e.printStackTrace();
- returnnull;
- }
- }
- //向服务器发送post请求
- public String doPost(String username,String password){
- try {
- url = new URL(urlAddress);
- uRLConnection = (HttpURLConnection)url.openConnection();
- uRLConnection.setDoInput(true);
- uRLConnection.setDoOutput(true);
- uRLConnection.setRequestMethod("POST");
- uRLConnection.setUseCaches(false);
- uRLConnection.setInstanceFollowRedirects(false);
- uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- uRLConnection.connect();
- DataOutputStream out = new DataOutputStream(uRLConnection.getOutputStream());
- String content = "username="+username+"&password="+password;
- out.writeBytes(content);
- out.flush();
- out.close();
- InputStream is = uRLConnection.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String response = "";
- String readLine = null;
- while((readLine =br.readLine()) != null){
- //response = br.readLine();
- response = response + readLine;
- }
- is.close();
- br.close();
- uRLConnection.disconnect();
- return response;
- } catch (MalformedURLException e) {
- e.printStackTrace();
- returnnull;
- } catch (IOException e) {
- e.printStackTrace();
- returnnull;
- }
- }
HTTPClient
- String urlAddress = "http://192.168.1.102:8080/qualityserver/login.do";
- public HttpClientServer(){
- }
- public String doGet(String username,String password){
- String getUrl = urlAddress + "?username="+username+"&password="+password;
- HttpGet httpGet = new HttpGet(getUrl);
- HttpParams hp = httpGet.getParams();
- hp.getParameter("true");
- //hp.
- //httpGet.setp
- HttpClient hc = new DefaultHttpClient();
- try {
- HttpResponse ht = hc.execute(httpGet);
- if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
- HttpEntity he = ht.getEntity();
- InputStream is = he.getContent();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String response = "";
- String readLine = null;
- while((readLine =br.readLine()) != null){
- //response = br.readLine();
- response = response + readLine;
- }
- is.close();
- br.close();
- //String str = EntityUtils.toString(he);
- System.out.println("========="+response);
- return response;
- }else{
- return "error";
- }
- } catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return "exception";
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return "exception";
- }
- }
- public String doPost(String username,String password){
- //String getUrl = urlAddress + "?username="+username+"&password="+password;
- HttpPost httpPost = new HttpPost(urlAddress);
- List params = new ArrayList();
- NameValuePair pair1 = new BasicNameValuePair("username", username);
- NameValuePair pair2 = new BasicNameValuePair("password", password);
- params.add(pair1);
- params.add(pair2);
- HttpEntity he;
- try {
- he = new UrlEncodedFormEntity(params, "gbk");
- httpPost.setEntity(he);
- } catch (UnsupportedEncodingException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- HttpClient hc = new DefaultHttpClient();
- try {
- HttpResponse ht = hc.execute(httpPost);
- //连接成功
- if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
- HttpEntity het = ht.getEntity();
- InputStream is = het.getContent();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String response = "";
- String readLine = null;
- while((readLine =br.readLine()) != null){
- //response = br.readLine();
- response = response + readLine;
- }
- is.close();
- br.close();
- //String str = EntityUtils.toString(he);
- System.out.println("=========&&"+response);
- return response;
- }else{
- return "error";
- }
- } catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return "exception";
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return "exception";
- }
- }
servlet端json转化:
- resp.setContentType("text/json");
- resp.setCharacterEncoding("UTF-8");
- toDo = new ToDo();
- List<UserBean> list = new ArrayList<UserBean>();
- list = toDo.queryUsers(mySession);
- String body;
- //设定JSON
- JSONArray array = new JSONArray();
- for(UserBean bean : list)
- {
- JSONObject obj = new JSONObject();
- try
- {
- obj.put("username", bean.getUserName());
- obj.put("password", bean.getPassWord());
- }catch(Exception e){}
- array.add(obj);
- }
- pw.write(array.toString());
- System.out.println(array.toString());
android端接收:
- String urlAddress = "http://192.168.1.102:8080/qualityserver/result.do";
- String body =
- getContent(urlAddress);
- JSONArray array = new JSONArray(body);
- for(int i=0;i<array.length();i++)
- {
- obj = array.getJSONObject(i);
- sb.append("用户名:").append(obj.getString("username")).append("\t");
- sb.append("密码:").append(obj.getString("password")).append("\n");
- HashMap<String, Object> map = new HashMap<String, Object>();
- try {
- userName = obj.getString("username");
- passWord = obj.getString("password");
- } catch (JSONException e) {
- e.printStackTrace();
- }
- map.put("username", userName);
- map.put("password", passWord);
- listItem.add(map);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- if(sb!=null)
- {
- showResult.setText("用户名和密码信息:");
- showResult.setTextSize(20);
- } else
- extracted();
- //设置adapter
- SimpleAdapter simple = new SimpleAdapter(this,listItem,
- android.R.layout.simple_list_item_2,
- new String[]{"username","password"},
- newint[]{android.R.id.text1,android.R.id.text2});
- listResult.setAdapter(simple);
- listResult.setOnItemClickListener(new OnItemClickListener() {
- @Override
- publicvoid onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- int positionId = (int) (id+1);
- Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();
- }
- });
- }
- privatevoid extracted() {
- showResult.setText("没有有效的数据!");
- }
- //和服务器连接
- private String getContent(String url)throws Exception{
- StringBuilder sb = new StringBuilder();
- HttpClient client =new DefaultHttpClient();
- HttpParams httpParams =client.getParams();
- HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
- HttpConnectionParams.setSoTimeout(httpParams, 5000);
- HttpResponse response = client.execute(new HttpGet(url));
- HttpEntity entity =response.getEntity();
- if(entity !=null){
- BufferedReader reader = new BufferedReader(new InputStreamReader
- (entity.getContent(),"UTF-8"),8192);
- String line =null;
- while ((line= reader.readLine())!=null){
- sb.append(line +"\n");
- }
- reader.close();
- }
- return sb.toString();
- }
URLConnection
HTTPClient
Proxies and SOCKS
Full support in Netscape browser, appletviewer, and applications (SOCKS: Version 4 only); no additional limitations from security policies.
Full support (SOCKS: Version 4 and 5); limited in applets however by security policies; in Netscape can't pick up the settings from the browser.
Authorization
Full support for Basic Authorization in Netscape (can use info given by the user for normal accesses outside of the applet); no support in appletviewer or applications.
Full support everywhere; however cannot access previously given info from Netscape, thereby possibly requesting the user to enter info (s)he has already given for a previous access. Also, you can add/implement additional authentication mechanisms yourself.
Methods
Only has GET and POST.
Has HEAD, GET, POST, PUT, DELETE, TRACE and OPTIONS, plus any arbitrary method.
Headers
Currently you can only set any request headers if you are doing a POST under Netscape; for GETs and the JDK you can't set any headers.
Under Netscape 3.0 you can read headers only if the resource was returned with a Content-length header; if no Content-length header was returned, or under previous versions of Netscape, or using the JDK no headers can be read.
Allows any arbitrary headers to be sent and received.
Automatic Redirection Handling
Yes.
Yes (as allowed by the HTTP/1.1 spec).
Persistent Connections
No support currently in JDK; under Netscape uses HTTP/1.0 Keep-Alive's.
Supports HTTP/1.0 Keep-Alive's and HTTP/1.1 persistence.
Pipelining of Requests
No.
Yes.
Can handle protocols other than HTTP
Theoretically; however only http is currently implemented.
No.
Can do HTTP over SSL (https)
Under Netscape, yes. Using Appletviewer or in an application, no.
No (not yet).
Source code available
No.
Yes.
转自:http://blog.sina.com.cn/s/blog_6610da3901012doz.html
- URLConnection和HTTPClient的比较
- URLConnection和HTTPClient的比较
- URLConnection和HTTPClient的比较
- URLConnection和HTTPClient的比较
- URLConnection和HTTPClient的比较
- httpclient和urlconnection比较
- URLConnection跟HTTPClient的比较
- URLConnection and HTTPClient的比较
- HttpClient和URLConnection的应用
- httpclient和urlconnection的区别
- android httpClient和URLConnection的区别
- android 中HttpClient和URLConnection的区别
- URLConnection和HttpClient使用入门
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- HttpURLConnection和HTTPClient的比较
- HttpURLConnection和HTTPClient的比较
- HttpURLConnection和HTTPClient的比较
- 关于Transparent Hugepage
- 彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释
- struts2源码阅读2
- 家乡的大樱桃
- Python上下文管理器(context manager)一例
- URLConnection和HTTPClient的比较
- iOS7界面设计规范
- Ubuntu12.04创建eclipse图标
- ubuntn 安装apache
- Linux 下ulimit命令, limits.conf 和file-max对比介绍
- shell中一些特殊符号的含义详解
- 颜色名列表
- jqueyr sortable 参数详解
- nginx+keepalived主辅切换