网络编程用别人提供的接口(安卓常用)
2016-06-18 23:17
621 查看
在android开发中,我们难免需要向后台请求数据,需要底层人员开发好给我们提供一个接口,首先我们来看一个Demo。看如何java如何请求url接口得到数据的
别人写好的封装,一般工作中我们都用这个,封装得更好
学习小记,如有不对之处请大神指点。
import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class URLDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String str_url = "http://localhost:8080/spring-7/index.jsp"; URL url = new URL(str_url); System.out.println("getProtocol:"+url.getProtocol()); System.out.println("getHost:"+url.getHost()); System.out.println("getPort:"+url.getPort()); System.out.println("getFile:"+url.getFile()); System.out.println("getPath:"+url.getPath()); System.out.println("getQuery:"+url.getQuery()); // InputStream in = url.openStream(); //获取url对象的Url连接器对象。将连接封装成了对象:java中内置的可以解析的具体协议的对象+socket. URLConnection conn = url.openConnection(); // String value = conn.getHeaderField("Content-Type"); // System.out.println(value); // System.out.println(conn); InputStream in = conn.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf,0,len); System.out.println(text); in.close(); } }我们继续自己写一个封装类来
1、利用jdk提供的原生接口实现http访问 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * 利用jdk提供的原生接口实现http访问 * @author luowenguan * */ public class HttpClient { private final URL url; public HttpClient (String _url) throws MalformedURLException { this.url = new URL(_url); } public byte[] post(String data) throws IOException { HttpURLConnection con = (HttpURLConnection) url.openConnection(); OutputStreamWriter out = null; BufferedReader reader = null; try { con.setRequestMethod("POST"); // 设置是否向HttpURLConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; con.setDoOutput(true); con.setConnectTimeout(3 * 1000); out = new OutputStreamWriter(con.getOutputStream()); out.write(data); // 刷新输出流,将任何字符都写入潜在的流中 out.flush(); // 连接,url.openConnection()至此的配置必须要在connect之前完成, // 实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。 con.connect(); if (con.getResponseCode() == 200) { System.out.println("Response OK"); StringBuffer resultData = new StringBuffer(); if (con.getResponseCode() == 200) { reader = new BufferedReader(new InputStreamReader( con.getInputStream(), "utf-8")); String line; while ((line = reader.readLine()) != null) { resultData.append(line); } byte[] bts = resultData.toString().getBytes(); return bts; } } return null; } finally { if (out != null) { out.close(); } if (reader != null) { reader.close(); } } } public static void main(String []args) throws IOException{ HttpClient h = new HttpClient("http://localhost:8080/spring-7/test"); byte[] s = h.post("name=哈哈&age=12"); System.out.println(new String(s)); } }
别人写好的封装,一般工作中我们都用这个,封装得更好
2、基于 httpclient 4.3.3版本的 http工具类
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import axer.exception.AppException; /** * 基于 httpclient 4.3.3版本的 http工具类 */ public class HttpClientUtil { private static final CloseableHttpClient httpClient; public static final String CHARSET = "UTF-8"; static { //setRedirectsEnabled 禁止自动跳转 RequestConfig config = RequestConfig.custom().setConnectTimeout(60000*100).setSocketTimeout(15000*100).setRedirectsEnabled(false).build(); httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); } public static String doGet(String url, Map<String, String> params){ return doGet(url, params,CHARSET); } public static String doPost(String url, Map<String, String> params){ return doPost(url, params,CHARSET); } /** * HTTP Get 获取内容 * @param url 请求的url地址 ?之前的地址 * @param params 请求的参数 * @param charset 编码格式 * @return 页面内容 */ public static String doGet(String url,Map<String,String> params,String charset){ if(StringUtils.isBlank(url)){ return null; } try { if(params != null && !params.isEmpty()){ List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size()); for(Map.Entry<String,String> entry : params.entrySet()){ String value = entry.getValue(); if(value != null){ pairs.add(new BasicNameValuePair(entry.getKey(),value)); } } url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset)); } HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { httpGet.abort(); throw new RuntimeException("HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null; if (entity != null){ result = EntityUtils.toString(entity, "utf-8"); } EntityUtils.consume(entity); response.close(); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** * HTTP Post 获取内容 * @param url 请求的url地址 ?之前的地址 * @param params 请求的参数 * @param charset 编码格式 * @return 页面内容 */ public static String doPost(String url,Map<String,String> params,String charset){ if(StringUtils.isBlank(url)){ return null; } try { List<NameValuePair> pairs = null; if(params != null && !params.isEmpty()){ pairs = new ArrayList<NameValuePair>(params.size()); for(Map.Entry<String,String> entry : params.entrySet()){ String value = entry.getValue(); if(value != null){ pairs.add(new BasicNameValuePair(entry.getKey(),value)); } } } HttpPost httpPost = new HttpPost(url); if(pairs != null && pairs.size() > 0){ httpPost.setEntity(new UrlEncodedFormEntity(pairs,CHARSET)); } CloseableHttpResponse response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { httpPost.abort(); throw new RuntimeException("HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null; if (entity != null){ result = EntityUtils.toString(entity, "utf-8"); } EntityUtils.consume(entity); response.close(); return result; } catch (Exception e) { throw new AppException(e); } } public static void main(String []args){ Map<String,String> pa = new HashMap<String, String>(); pa.put("name", "张飞"); pa.put("age", "121"); String getData = doPost("http://localhost:8080/spring-7/test",pa); System.out.println(getData); System.out.println("----------------------分割线-----------------------"); // String postData = doPost("http://www.oschina.net/",null); // System.out.println(postData); } }一般都是用第二种,封装更好,别人封装好的方法。代码中地址灵活修改,可以请求action返回json或者xml。这种方法在安卓中比较常用,当应用层想让底层帮弄一个接口基本上都是这样去实现接口,然后使用接口返回的数据
学习小记,如有不对之处请大神指点。
相关文章推荐
- tcpdump命令使用介绍
- linux网络编程----->高并发--->多进程并发服务器
- HttpClient使用详解(ssl)
- TCP/IP网络编程之四书五经
- 我与华为网络技术大赛
- 网络编程中服务器发送的消息,客户端收不到也没有反应的几点原因
- iOS 下载缓存网络图片 SDWebImage
- VMWare 网络设置简介
- 网络设计
- 在CentOS配置Apache的HTTPS服务
- HTTP Status 404 -(tomcat,springmvc,ModelAndView)
- https 相关知识 (openssl)
- 注意设置httpclient连接数
- (1) Socket网络编程(C#)----TcpListener 与 TcpClient
- Httpservlet
- [机器学习笔记]Note6--神经网络:表达
- JAVA利用HttpClient进行POST请求(HTTPS)
- EZ的间谍网络(codevs 4093)
- HTTP协议首部字段transfer-encoding与content-length差异
- 【VS开发】【DSP开发】TCP和UDP数据包结构