Http通信
2015-06-02 18:30
239 查看
一.使用HttpURLConnection进行网络通信。HttpURLConnection类位于java.net包中,用于发送HTTP请求和获取HTTP响应,由于该类是抽象类,不能直接实例化对象,需要使用URL的openConnection()方法来获得。
1.使用HttpURLConnection发送GET请求。使用HttpURLConnection对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只是在指定连接地址时,先将要传递的参数通过“?参数名=参数值&参数名=参数值”等进行传递,然后获取流中的数据并关闭连接即可。
其它方法:
setDoInput(boolean newvalue):用于设置是否向连接中写入数据,如果参数值为true,表示写入数据,否则不写入数据。
setDoOutput(boolean newvalue):用于设置是否从连接中读取数据,如果参数值为true时,表示读取数据,否则不读取数据。
setUseCaches(boolean newvalue):用于这是是否缓存数据,true表示缓存数据,否则表示禁用缓存。
setInstanceFollwRedirects(boolean followRedirects):用于设置是否应该自动执行http重定向,true表示自动执行,否则不自动执行。
setRequestProperty(String field,String newValue):用于设置一般请求属性,列列如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www/form-urlencodesd")。
1.发送GET请求。
步骤: (1)创建HttpClient对象;
(2)创建HttpPOST对象;
(3)如果需要发送请求参数,可以调用HttpPOST的setParams或setEntity方法来添加请求参数;
(4)调用HttpClient对象的execute方法发送请求,执行该方法将返回一个HttpResponse对象;
(5)调用HttpResponse的getEntity方法,对获得包含了服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。
1.使用HttpURLConnection发送GET请求。使用HttpURLConnection对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只是在指定连接地址时,先将要传递的参数通过“?参数名=参数值&参数名=参数值”等进行传递,然后获取流中的数据并关闭连接即可。
//使用HttpURLConnection发送GET请求(默认情况下HttpURLConnection使用GET请求) public void HttpURLConnection_GET(){ //创建URL对象 try { URL url = new URL("https://www.baidu.com/s?wd=你好"); //创建一个HTTP连接 try { HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); Toast.makeText(myHttpURLConnection.this, "HTPP连接成功!", Toast.LENGTH_SHORT).show(); //设置请求超时 urlConnection.setReadTimeout(2000);//2秒 //获取数据 <span> </span>//断开连接 <span> </span>urlConnection.disconnect(); } catch (IOException e) { System.out.println("HTPP连接出错!"); Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show(); } } catch (MalformedURLException e) { System.out.println("URL不存在!"); Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show(); } }2.由于采用GET秦秋发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据比较大的时候,就需要使用POST方式来发送该请求。在Android中,使用HttpURLConnection类在发送请求时,默认采用的是GET请求,如果发送POST请求,需要通过setRequestMethod()方法进行制定。
其它方法:
setDoInput(boolean newvalue):用于设置是否向连接中写入数据,如果参数值为true,表示写入数据,否则不写入数据。
setDoOutput(boolean newvalue):用于设置是否从连接中读取数据,如果参数值为true时,表示读取数据,否则不读取数据。
setUseCaches(boolean newvalue):用于这是是否缓存数据,true表示缓存数据,否则表示禁用缓存。
setInstanceFollwRedirects(boolean followRedirects):用于设置是否应该自动执行http重定向,true表示自动执行,否则不自动执行。
setRequestProperty(String field,String newValue):用于设置一般请求属性,列列如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www/form-urlencodesd")。
//使用HttpURLConnection发送POST请求 public void HttpURLConnection_POST(){ //要提交的地址 String target = "http://www.baidu.com/"; URL url; try { url = new URL(target); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //创建http连接 conn.setRequestMethod("POST"); //指定使用POST请求方式 conn.setDoInput(true); //向连接中写入数据 conn.setDoOutput(true); //从连接中读取数据 conn.setUseCaches(false); //禁用缓存 conn.setInstanceFollowRedirects(true); //自动执行htpp重定向 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //设置内容类型 //获取数据,此处省略 //判断是否响应成功 if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ } conn.disconnect(); //断开连接 } catch (MalformedURLException e) { System.out.println("URL不存在!"); Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show(); } catch (IOException e) { System.out.println("HTPP连接出错!"); Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show(); } }二.HttpURLConnection技术一般使用在到某个页面提交请求并获取服务器响应。不过,对于比较复杂的联网操作使用HttpURLConnection类就不一定能满足要求,这时,可以使用Apache组织提供的一个HttpClient项目实现。
1.发送GET请求。
//使用HttpClient的HttpGet类发送GET请求 public void HttpClient_GET(){ String target = "http://www.baidu.com/"; //创建HttpClient对象 HttpClient httpClient = new DefaultHttpClient(); //创建httpgGet连接对象 HttpGet httpRequest = new HttpGet(target); HttpResponse httpResponse; try { //执行HttpClient请求 httpResponse = httpClient.execute(httpRequest); /* if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //获取返回的字符串 String result = EntityUtils.toString(httpResponse.getEntity()); }else{ System.out.println("请求失败!"); Toast.makeText(myHttpURLConnection.this, "请求失败!", Toast.LENGTH_SHORT).show(); }*/ } catch (ClientProtocolException e) { System.out.println("HttpClient请求失败!"); Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }2.发送POST请求
步骤: (1)创建HttpClient对象;
(2)创建HttpPOST对象;
(3)如果需要发送请求参数,可以调用HttpPOST的setParams或setEntity方法来添加请求参数;
(4)调用HttpClient对象的execute方法发送请求,执行该方法将返回一个HttpResponse对象;
(5)调用HttpResponse的getEntity方法,对获得包含了服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。
//使用HttpClient发送POST请求 public void HttpClient_POST(){ String target = "http://www.baidu.com/"; //创建HtppClient对象 HttpClient httpClient = new DefaultHttpClient(); //创建HttpPOST对象 HttpPost httpPost = new HttpPost(target); //将要传递的参数保存到List集合中 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("param", "post")); //标记参数 params.add(new BasicNameValuePair("nick_name", "昵称")); // HttpRequest.setEntity(new UrlEncodedFormEntity(params,"utf-8")); //设置编码方式 try { //执行HttpClient请求 HttpResponse httpResponse = httpClient.execute(httpPost); if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ String result = EntityUtils.toString(httpResponse.getEntity()); //获取返回的字符串 }else{ Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
相关文章推荐
- unix网络编程(unp)----源代码环境搭建
- System.ServiceModel.CommunicationException: 接收HTTP 响应时发生错误
- System.ServiceModel.CommunicationException: 接收HTTP 响应时发生错误
- 计算机网络复习总结之网络层(二)
- Foundation--NSHTTPCookieStorage
- 图解HTTPS协议加密解密全过程
- 使用boost做post/get请求开发笔记
- 新家地址 http://vizee.org
- TCP/UDP编程中的问题汇总
- TCP连接建立与关闭
- Android Volley完全解析(二),使用Volley加载网络图片
- Android之Http通信——1.初识Http协议
- UDP协议及包格式
- python编写借助linux中的xinetd守护进程实现我们的网络程序(select、重定向标准输入输出)
- ASIHTTPRequest类库简介和使用说明
- 博客地址迁移到http://blog.csdn.net/sunansheng
- HttpUtils介绍
- 常用linux网络管理命令(下)
- CentOS网络配置详解
- MQTT WebSocket TCP/IP