最近在看Http协议等网络部分的知识,网络通而信可谓android中比较重要的部分了,而实现Http通信的最重要的莫过于俩个接口:HttpURLConnection和HttpClient。一般情况下俩个接口简单的访问网络。Apache提供的是后者,以后网络部分估计HttpClient用的较多一下。而且实现较容易理解一些。以下是源代码:首先实现的HttpURLConnection的GET方法,下面俩个接口的俩个方法即GET和POST均会实现。。。
public class BaiscHttpGetWay {
private String path1=null;
private String resultData=null;
public String getpath(String path) throws Exception
{
this.path1=path;
URL url=new URL(path1);
System.out.println(path1);
if(url!=null)
{ //由于get的方法相比较容易就不做解释了
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(5*1000);
if(conn.getResponseCode()==200)
{
InputStream is=conn.getInputStream();
resultData=getresultdata(is);
System.out.println(resultData);
}
conn.disconnect();
}
return resultData;
}
private String getresultdata(InputStream is) throws Exception
{
// TODO Auto-generated method stub
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((is.read(buffer))!=-1)
{
out.write(buffer,0,len);
}
byte[] data=out.toByteArray();
return new String(data);
}
}
然后是POSt方法的实现:
public class BasicHttpPostWay
{
private String path1=null;
private String resultData=null;
public String getpath(String path,String param)throws Exception
{
//传递是以二进制传递字符串无法完成此操作所以用byte数组传递也可以用其他方法
byte[] data=param.getBytes();
this.path1=path;
URL url=new URL(path1);
System.out.println(path1);
if(url!=null)
{
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//这里是Post请求,所以就设置为true
conn.setDoInput(true);
conn.setDoOutput(true);
//设置请求Post
conn.setRequestMethod("POST");
conn.setConnectTimeout(5*1000);
//由于Post请求不能使用缓存
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
//设置其他畅通设置格式以及数组长度,不过若你不用数组直接用字符串的话
//查了一下可以用URLEcode.encode进行操作
conn.setRequestProperty("Connection","Keep-Alive" );
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length",String.valueOf(data) );
//配置本次连接Content-type,后面参数正文为Orlencoded编码过的form参数具体是啥我也不知到反正为固定格式
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded" );
//连接,从打开连接即openConnection到connect之间必须先配好
conn.connect();
//查了一下大部分Post都是用DataOutputStream完成此操作
DataOutputStream out=new DataOutputStream(conn.getOutputStream());
out.write(data);
//刷新,关闭
out.flush();
out.close();
if(conn.getResponseCode()==200)
{
InputStream is=conn.getInputStream();
//定义一个方法用来转换流的内容
resultData=getresultData(is);
System.out.println(resultData);
}
conn.disconnect();
}
return resultData;
}
private String getresultData(InputStream is) throws Exception
{ // TODO Auto-generated method stub
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((is.read(buffer))!=-1)
{
out.write(buffer,0,len);
}
byte[] data=out.toByteArray();
return new String(data);
}
}
接下来是HttpClient借口中方法的实现:
首先是GET方法:
public class ApacheHttpGetWay
{
private String path1=null;
private String resultDataString=null;
public String getpath(String path)throws Exception
{
this.path1=path;
//HttpGet的连接对象
HttpGet httpGet=new HttpGet(path1);
//声明一个HttpClient的对象
HttpClient httpClient=new DefaultHttpClient();
//执行请求并用HttpResponse接受请求过来的内容
HttpResponse httpResponse=httpClient.execute(httpGet);
//判断请求是否成功
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{ //取得返回的字符串
resultDataString=EntityUtils.toString(httpResponse.getEntity());
System.out.println(resultDataString);
}
else
{
System.out.println("it is null!!!");
}
return resultDataString;
}
}
//然后是POST方法
public class ApacheHttpPostWay
{
private String path1=null;
private String resultDataString=null;
public String getpath(String path,List<NameValuePair> param)throws Exception
{
this.path1=path;
//设置连接对象即连接请求
HttpPost post=new HttpPost(path1);
//将参数加入请求里面定死的
post.setEntity(new UrlEncodedFormEntity(param,HTTP.UTF_8));
//获取HttpClient的对象
HttpClient httpClient=new DefaultHttpClient();
//执行请求并将字符返回到httpResponse
HttpResponse httpResponse=httpClient.execute(post);
//判断是否连接成功格式定死的
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{ //返回字符串格式定死的
resultDataString=EntityUtils.toString(httpResponse.getEntity());
System.out.println(resultDataString);
}
else {
System.out.println("it is null!!!");
}
return resultDataString;
}
}
总之而言,在做项目的过程中POST方法使用的较多,因其保密性较好,不过GET用的也较多,所以看个人喜好了。在学习这一块内容的时候要好好把握俩个接口的使用法,这样才能不容易记混!!
分享到:
相关推荐
总结来说,HTTP协议是应用层的网络协议,用于客户端和服务器之间传输数据。它基于TCP/IP协议,支持无状态的请求/响应模式,并且可以通过HTTPS来确保通信的安全。HTTP协议的版本升级增加了更多的功能,使得Web通信...
总结来说,“应用层协议与应用.rar”涵盖了网络通信中的多个重要方面,包括但不限于HTTP、HTTPS、FTP、SFTP、NFS、DNS、SMTP、POP3、IMAP以及TCP和UDP等协议的工作原理和应用场景。深入理解这些协议对于网络管理员、...
本文将对计算机网络协议进行总结,涵盖物理层、数据链路层、网络层、传输层和应用层等多个方面。 物理层(比特流) 物理层是计算机网络的最底层,负责将比特流传输到物理媒体上。物理层的主要协议包括PPP协议和...
总的来说,路由协议的高度总结涵盖了路由协议的基本概念,包括它们如何工作、静态与动态路由的区别以及如何在Cisco设备上配置这些路由。理解这些基本原理对于网络管理员来说是至关重要的,因为它们直接影响着网络的...
实验报告“3-2019054001-张诗宇-Internet应用与应用层协议分析1”主要涉及互联网应用中的关键协议和工作流程,包括HTTP、DNS、FTP和SMTP。这个实验的主要目的是理解和掌握这些协议的作用、原理以及如何使用Wireshark...
HTTP(超文本传输协议)是应用层协议,用于客户端和服务器之间的通信。它基于TCP/IP协议栈,以请求/响应模型进行交互。HTTP请求报文和响应报文具有固定的格式。 **HTTP请求报文格式** 1. **请求行**:包括请求方法...
总结,HTTP协议是互联网上网页内容传输的基础,它的原理、方法、状态码以及与服务器软件如Apache的结合,共同构成了网络通信的核心部分。开发者通过对HTTP的理解和应用,可以创建出丰富的交互式Web应用程序。
Zigbee 协议栈学习总结 Zigbee 协议栈是基于 IEEE 802.15.4 标准的无线通信协议栈,主要应用于智能家居、商业楼宇自动化、自动读表系统等领域。Zigbee 协议栈的主要特点是高可靠性、低成本、低功耗、高安全性和低...
路由协议高度总结 路由协议是计算机网络中用于确定路径和维护路由表的协议。根据路由协议的类型,可以分为静态路由协议和动态路由协议。 静态路由协议是由网络管理员手动配置的路由,它不能自动适应网络 topology ...
**WAP无线应用协议** WAP(Wireless Application ...总结来说,WAP无线应用协议是移动互联网早期的关键技术,它为移动设备接入互联网铺平了道路,虽然现在已被更高效的技术所替代,但其对移动通信行业的影响不可忽视。
网络路由协议对比总结 路由协议是计算机网络中的一种通信协议,用于确定数据包在网络中的传输路径。路由协议的选择对网络的性能和可靠性有着至关重要的影响。在本文中,我们将对常见的路由协议,如RIP、OSPF、IS-IS...
总结来说,TCP/IP协议是互联网的基石,它的分析与应用不仅关乎网络通信的效率和可靠性,还影响着各种网络服务的性能和用户体验。深入理解和掌握TCP/IP协议,对于从事IT行业的专业人士至关重要,无论是在开发、运维...
总结来说,这个实验报告提供了对应用层协议,特别是HTTP和DNS的实践经验。通过实际操作和分析,我们能深入理解这两个协议在互联网通信中的作用,以及它们如何协同工作,确保了我们能够便捷地访问和交互网络资源。
"计算机网络协议总复习课程总结" 计算机网络协议是计算机专业的一门核心课程, 涉及到网络协议的设计、实现、应用等多方面内容。下面是关于计算机网络协议的知识点总结: 一、协议分层 计算机网络协议采用分层...
HTTP(超文本传输协议,...总结起来,HTTP协议是互联网的基础,它规定了客户端和服务器之间的通信规则,使得Web应用能够正常运行。理解并熟练运用HTTP协议对于开发Web应用、调试网络问题以及优化网络性能至关重要。
- 因特网电话应用中, RTP与RTCP(实时控制协议)通常与UDP协议结合使用,用于传输语音数据。 2. 运输层协议功能详解: - 提供进程间的逻辑通信,端到端的通信服务。 - 支持复用和分用机制,允许多个应用程序...
这份"HTTP协议学习总结共10页.pdf"的资料,很可能包含了对HTTP协议的全面概述,包括其原理、结构、请求方法、响应状态码、报文格式以及与HTTPS的区别等内容。 1. HTTP协议原理:HTTP协议是一种无状态、基于请求与...
### 光模块的协议总结介绍 #### 一、光模块的组织和协议 光模块作为现代网络通信系统中的核心部件之一,在数据传输过程中扮演着至关重要的角色。为了确保光模块能够在不同的应用场景下实现高效的数据传输,一系列...