http协议
来源:互联网 发布:access数据库新技术 编辑:程序博客网 时间:2024/05/04 06:42
1. HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基于传输层的TCP协议进行通信,HTTP协议是通用的、无状态的协议。
这几个名词有一种通俗的解释:
- 通讯协议:双方对话的标准
- 通用的:用了都说好,谁用谁知道
- 无状态的:翻脸不认人
- 超文本:除了文本,还可以是音频、视频
2、客户端连接服务器实现内部的原理如下:
分析上图,步骤如下:
- 第一步:在浏览器客户端中得到用户输入的内容。
- 第二步:浏览器得到这个网址之后,内部会将这个域名发送到DNS上,进行域名解析。得到它的IP之后就会链接到指定的服务器上,假如服务器的地址是:221.104.13.32:80,从浏览器到服务器端口它使用到最底层的TCP/IP协议。
- 第三步:实现TCP/IP协议用Socket来完成,使用了Socket的套接字。
- 第四步:服务器端的80端口监听客户端的链接,这样客户端到服务器就链接上了。
- 服务器接收到这些内容之后,并按照这些请求的路径找到对应的页面,进一步找到对应的网页内容,返回给客户端。
通俗一点讲,用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JASON。
三、使用HTTP协议访问网络:
Android中的WebView控件已经在后台帮我们处理好了发送HTTP请求、接收服务响应、解析返回数据,以及最终的页面展示这几步工作,不过由于它封装得太好了,反而不能直观地看出HTTP协议是如何工作的。因此接下来我们通过手动发送HTTP请求的方式,来更加深入的了解这一过程。
在Android上发送HTTP请求的方式一般有两种:HttpURLConnection和HttpCient。我们先来学习HttpCient。
HTTP返回请求数据的三种方式:
- 1、以HTML代码内容返回。
- 2、以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。
- 3、以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
简单来说,用HttpClient发送请求、接收响应都很简单,只需要五大步骤即可:(要牢记)
- 创建代表客户端的HttpClient对象。
- 创建代表请求的对象,如果需要发送GET请求,则创建HttpGet对象,如果需要发送POST请求,则创建HttpPost对象。注:对于发送请求的参数,GET和POST使用的方式不同,GET方式可以使用拼接字符串的方式,把参数拼接在URL结尾;POST方式需要使用setEntity(HttpEntity entity)方法来设置请求参数。
- 调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法后,将获得服务器返回的HttpResponse对象。服务器发还给我们的数据就在这个HttpResponse相应当中。调用HttpResponse的对应方法获取服务器的响应头、响应内容等。
- 检查相应状态是否正常。服务器发给客户端的相应,有一个相应码:相应码为200,正常;相应码为404,客户端错误;相应码为505,服务器端错误。
- 获得相应对象当中的数据
http的两种请求方式:POST和GET
由于Android的SDK包含org.apache.http包,所以不用导入jar了
GET方式:
String serverURL = "http://127.0.0.1/xxx/xx.jsp?username=abc;HttpGet httpRequest = new HttpGet(serverURL);// 建立http get联机HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);// 发出http请求if (httpResponse.getStatusLine().getStatusCode() == 200) String result = EntityUtils.toString(httpResponse.getEntity());// 获取相应的字符串
POST方式:
String uriAPI = "http://127.0.0.1/xxx/xx.jsp"; //声明网址字符串 HttpPost httpRequest = new HttpPost(uriAPI); //建立HTTP POST联机 List <NameValuePair> params = new ArrayList <NameValuePair>(); //Post运作传送变量必须用NameValuePair[]数组储存 params.add(new BasicNameValuePair("str", "I am Post String")); httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //发出http请求 HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); //取得http响应 if(httpResponse.getStatusLine().getStatusCode() == 200) String strResult = EntityUtils.toString(httpResponse.getEntity()); //获取字符串
//方法:发送网络请求,获取百度首页的数据。在里面开启线程63 private void sendRequestWithHttpClient() {64 new Thread(new Runnable() {65 66 @Override67 public void run() {68 //用HttpClient发送请求,分为五步69 //第一步:创建HttpClient对象70 HttpClient httpCient = new DefaultHttpClient();71 //第二步:创建代表请求的对象,参数是访问的服务器地址72 HttpGet httpGet = new HttpGet("http://www.baidu.com");73 74 try {75 //第三步:执行请求,获取服务器发还的相应对象76 HttpResponse httpResponse = httpCient.execute(httpGet);77 //第四步:检查相应的状态是否正常:检查状态码的值是200表示正常78 if (httpResponse.getStatusLine().getStatusCode() == 200) {79 //第五步:从相应对象当中取出数据,放到entity当中80 HttpEntity entity = httpResponse.getEntity();81 String response = EntityUtils.toString(entity,"utf-8");//将entity当中的数据转换为字符串82 83 //在子线程中将Message对象发出去84 Message message = new Message();85 message.what = SHOW_RESPONSE;86 message.obj = response.toString();87 handler.sendMessage(message);88 }89 90 } catch (Exception e) {91 // TODO Auto-generated catch block92 e.printStackTrace();93 }94 95 }96 }).start();//这个start()方法不要忘记了 97 98 } 99 }
0 0
- HTTP协议
- http协议
- HTTP协议
- HTTP协议
- HTTP协议
- http协议
- HTTP协议
- HTTP协议
- HTTP协议。。。
- HTTP协议
- HTTP协议
- HTTP协议
- HTTP协议
- HTTP协议
- http协议
- HTTP协议
- http协议
- HTTP协议
- 绝对定位问题
- js冲突导致的问题
- 学习笔记:linux 转换指定目录下文件名编码格式
- WebStorm下载及破解
- vuejs从安装到搭建的整个过程
- http协议
- 解决Android中TextView和ExpandableListView和ScrollView滑动冲突问题
- 微信公众平台开发[5] —— 微信扫码支付
- 图像处理与计算机视觉基础,经典以及最近发展
- git上拉取内容会有两个协议,有什么区别呢
- 安卓服务Servise
- 将元组数据写入txt文件中
- 个人学习笔记----基于Spring4.3.1+mybatis+postgresql+maven搭建的个人用调度平台(四)
- adt更新sdk后不能运行