QuecPython+HTTP协议应用指导

HTTP 简介

HTTP协议

HTTP(Hyper Text Transformer Protocol,超文本传输协议)是一种由客户端发起请求,通过 URL(Uniform Resource Locator,统一资源定位符)来访问服务器资源的一种通信协议。该协议基于 C/S 模型,以文本的形式组织请求和响应的报文。通信模型如下:

HTTP 协议的主要应用场景有:基于浏览器的网页获取与表单提交、文件上传与下载、移动应用、物联网设备的数据上报等。

请求和响应报文

请求报文

HTTP 请求报文的格式如下:

  • Request line:请求行,由methodURLVersion字段组成。
    • method:请求方法,常用的方法有 GET、POST、PUT、HEAD、DELETE 等,详见下文
    • URL:统一资源定位符,用于标识服务器资源的路径。
    • Version:协议版本,目前常用的版本为HTTP/1.1
  • Header lines:请求首部,由一个或多个头域组成,每个头域的格式为header field name: value
    • head field name:头域的名称。
    • value:头域的值。
  • Entity body:消息体,即向服务器传递的消息正文。

值得注意的是,图中的sp表示空格,cr lf表示回车与换行,请求首部与消息体之间必须插入一行空行,即图示的Blank line

请求报文的示例如下:

img

响应报文

HTTP 响应报文的格式如下:

  • Status line:响应状态行,由versionstatus codephrase字段组成。
    • version:协议版本,目前常用的版本为HTTP/1.1
    • status code:响应状态码,详见下文
    • phrase:原因短语。
  • Header lines:响应首部,由一个或多个头域组成,每个头域的格式为header field name: value
    • head field name:头域的名称。
    • value:头域的值。
  • Entity body:消息体,即服务器响应的消息正文。

值得注意的是,图中的sp表示空格,cr lf表示回车与换行,响应首部与消息体之间必须插入一行空行,即图示的Blank line

响应报文的示例如下:

img

HTTP 请求方法

HTTP 常用的方法有 GET、POST、PUT、HEAD、DELETE 等。

  • GET:HTTP 请求中最常用的方法,用于向服务器请求获取资源。

  • HEAD:和 GET 方法一样,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

  • PUT:用于向服务器上传资源,当资源不存在时则创建资源,否则会替换资源。

  • POST:用于修改服务器资源,当资源不存在时则创建资源,否则会修改资源。

  • DELETE:删除资源,与 PUT 功能相反。

HTTP 状态码

服务器返回的响应报文中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。

状态码类别原因短语
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错
  • HTTP 协议的具体内容请参考国际互联网工程任务组的官方文档

  • HTTP 协议与 TCP 协议的区别与联系:

    • HTTP 协议是基于 TCP 协议实现的。

    • TCP 协议面向字节流,用户无法很好地确定业务数据的边界;而 HTTP 协议具有特定的报文格式,而且用户业务数据可通过Content-Length: ${Length}头域来指定用户数据长度,或通过Transfer-Encoding:chunked头域来指定用户数据编码格式,两种方式均可确定业务数据的边界。QuecPython 模组已同时支持对Content-Length: ${Length}Transfer-Encoding:chunked两种方式的解析。

 HTTP 应用范例

天气查询

高德开放天气查询接口:http://restapi.amap.com/v3/weather/weatherInfo?key=2875b8171f67f3be3140c6779f12dcba&city=北京&extensions=base

北京可替换为其他国内城市名称。

import request

# Weather query URL
url = 'http://restapi.amap.com/v3/weather/weatherInfo?key=2875b8171f67f3be3140c6779f12dcba&city=北京&extensions=base'

# Send the HTTP GET request
response = request.get(url)

# Get raw data from the website and parse it into a dict type by calling the json() method of response object
data = response.json()
data = data['lives'][0]
for k,v in data.items():
    print('%s: %s' % (k, v))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值