http 协议~一

Posted monkey-moon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http 协议~一相关的知识,希望对你有一定的参考价值。

http 协议(1)

  1. HTTP协议的主要特点
  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1. 请求行--方法:

GET:请求服务器的文档

HEAD:请求关于文档的信息,但不是这个文档本身

POST:从客户向服务器发送一些信息

PUT:从服务器向客户发送文档

TRACE:把到达的请求回送

CONNECT:保留

DELETE:删除Web网页

OPTIONs:询问关于可用的选项

2. 请求行--URL

URL:统一资源定位符,是在因特网上知名任何种类的信息的标准,URL定义的是四样东西:

协议 :// 主机 : 端口 / 路径

3.状态行--状态码:

大致分类如下所示:

100-199 用于指定客户端应相应的某些动作。

200-299 用于表示请求成功。

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

400-499 用于指出客户端的错误。

500-599 用于支持服务器错误。

URL组成

  • URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

  • post方法的参数是放在body中的,可以看到参数放到URL中是无效的

  • 放到body中,以key-value的形式进行传参,返回json串的形式,参照返回参数说明,可以看到登陆成功。

传递 URL 参数

    1. 如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, httpbin.org/get?key=val。
    1. Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。

==

  • 举例来说,如果你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代码:
payload = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘}
r = requests.get("http://httpbin.org/get", params=payload)

通过打印输出该 URL,你能看到 URL 已被正确编码:

print(r.url)

结果如下:

http://httpbin.org/get?key2=value2&key1=value1
  • 注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。
    1. 你还可以将一个列表作为值传入:

payload = {‘key1‘: ‘value1‘, ‘key2‘: [‘value2‘, ‘value3‘]} r = requests.get(‘http://httpbin.org/get‘, params=payload) print(r.url)

输出如下:

http://httpbin.org/get?key1=value1&key2=value2&key2=value3

响应内容

r.text

定制请求头

  • 如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。
url = ‘https://api.github.com/some/endpoint‘
headers = {‘user-agent‘: ‘my-app/0.0.1‘}
r = requests.get(url, headers=headers)

POST一个多部分编码(Multipart-Encoded)的文件

url = ‘http://httpbin.org/post‘
files = {‘file‘: open(‘report.xls‘, ‘rb‘)}

r = requests.post(url, files=files)
r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}

以上是关于http 协议~一的主要内容,如果未能解决你的问题,请参考以下文章

下一代 HTTP 底层协议将弃用 TCP 协议,改用 QUIC 技术

新一代http协议 http2

基于UDP的新一代HTTP协议及对爬虫的影响

Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0

CDN快讯阿里云对HTTP/3新一代网络传输协议QUIC浅析

新一代通信协议—— RSocket