本文概述
- HTTP
- Python中的库发出HTTP请求
- 用Python请求
- 使用GET请求
- 使用请求模块下载和保存图像
- 在请求中传递参数
- 使用POST请求
- JSON响应
- 总结
在本教程中, 我们将介绍如何下载图像, 将参数传递给请求, 以及如何执行” 发布” 请求以将数据发布到特定路线。此外, 你还将学习如何获取JSON响应以进行更动态的操作。
- HTTP
- Python中的库发出HTTP请求
- 用Python请求
- 使用GET请求
- 使用请求模块下载和保存图像
- 在请求中传递参数
- 使用POST请求
- JSON响应
例如, 你可以使用客户端(浏览器)在Google上搜索” 狗” 图像。然后, 它将HTTP请求发送到服务器, 即托管狗图像的地方, 服务器的响应是带有所请求内容的状态码。这是一个过程, 也称为请求-响应周期。你也可以查看本文” 什么是HTTP” 以获取更详细的说明。
Python中的库发出HTTP请求 使用Python发出HTTP请求的库有很多, 例如httplib, urllib, httplib2, treq等, 但是请求是其中最简单, 文档最多的库。
你将在本教程中使用请求库, 执行此命令的命令如下:
pip install requests
用Python请求 根据Wikipedia的说法, “ 请求是在Apache2许可下发布的Python HTTP库。该项目的目标是使HTTP请求更简单, 更友好。当前版本为2.22.0″ 。
使用GET请求 GET请求是最常见的方法, 用于从特定服务器获取请求的数据。
你需要使用以下命令在开发环境中导入所需的模块:
import requests
你可以使用’ request.get(‘ specific_url’ )’ 从特定资源检索数据, 并且’ r’ 是响应对象。
r =requests.get('https://xkcd.com/1906/')
状态码 根据Wikipedia的说法, “ 状态代码是由服务器发出的, 以响应客户端对服务器的请求。” 在这里可以找到许多其他状态代码和详细说明:HTTP状态代码。
但是, 下面将解释两种最常见的状态代码:
r.status_code
运行上面的代码后, 你可以在下面看到状态代码为” 200″ (即” 确定” ), 并且请求成功。
文章图片
标头 你可以使用” .headers” 查看响应头。返回Python字典的位置。它们返回许多附加信息, 其中包括不区分大小写的名称, 资源类型以及服务器名称, 版本等, 并且还包括在下面显示的代码中。
r.headers
上面代码中获得的重要信息是服务器名称, 如” Apache” , 内容类型, 编码等。
r.headers['Content-Type']
你可以使用不区分大小写的” content-type” 在上方查看标头内容的类型, 并且” Content-Type” 也将获得与以下相同的结果。
文章图片
响应内容 你可以使用” .text” 获取页面的HTML文本。该请求可以从服务器自动解码任何内容, 并且采用Unicode形式, 并带有以下代码:
r.text
你可以获得HTML的整个页面, 并且可以在HTML解析器的帮助下进行解析。
'\r\n<
!DOCTYPE html>
\r\n<
html>
\r\n<
head>
\r\n\r\n<
link href="http://www.smbc-comics.com/comiccontrol/defaultstyles.css?=2" rel="stylesheet" type="text/css" />
\r\n<
link rel="shortcut icon"
href="http://www.smbc-comics.com/favicon.ico" type="image/x-icon" />
\r\n<
meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
\r\n<
link rel="shortcut icon"
href="http://www.smbc-comics.com/favicon.ico" type="image/x-icon">
\r\n<
link rel="icon"
href="http://www.smbc-comics.com/favicon.ico"
使用请求模块下载和保存图像 你需要导入模块, 即使用本地计算机中的requests命令, 并通过” request.get” ” 接收” 响应对象。以及要下载的图片网址, 如下所示。
import requests
receive = requests.get('https://imgs.xkcd.com/comics/making_progress.png')
with open(r'C:\Users\Dell\Desktop\comics\image5.png', 'wb') as f:
f.write(recieve.content)
你可以看到上面的” with” 语句有助于使用with open函数来管理文件流, 在该函数中, 必需的路径指定了执行特定操作的过程, ” r” 将普通字符串转换为原始字符串。也就是说, 在本地计算机的位置在C:\ Users \ Dell \ Desktop \ comics \ image5.png中包含” \” 的情况下, 所有字符都必须保持不变, 因此必须保留且不应转义。打开模式是” wb” , 它以二进制方式写入文件, 而” f” 是文件对象, 必须编写函数以写入适当的内容, 即下载所需的图像。
使用请求模块下载和保存图像的最终代码如下:
import requests
receive = requests.get('https://imgs.xkcd.com/comics/making_progress.png')
with open(r'C:\Users\Dell\Desktop\comics\image5.png', 'wb') as f:
f.write(recieve.content)
在请求中传递参数 你将使用httpbin, 这是简单的HTTP库用于测试必须在’ httpbin.org/get?key=value之后给出数据的地方, 但是request提供了一种简单的方法来制作字典所在的位置使用’ param’ 关键字作为参数传递。
你可以在” ploads” 下面看到示例, 该字典包含” things” 和” total” 作为键, 其值分别为2和25, 并作为参数传递给” get” , 其中” params = ploads”
import requests
ploads = {'things':2, 'total':25}
r = requests.get('https://httpbin.org/get', params=ploads)
print(r.text)
print(r.url)
文章图片
你还可以使用命令” r.url” 查看URL, 如下所示:
print(r.url)
执行此操作后的输出是URL, 其中包含你在” ?” 之后以键值形式设置的字典。标志。
文章图片
使用POST请求 【在Python中执行HTTP请求】POST是最常见的请求方法, 主要用于通过” 表单” 将数据发送到服务器以在服务器中创建/更新。
你可以将表单数据” 发布” 到” requests.post” 所在的路由, 并制作一个名为” pload” 的字典, 并将其作为自变量发送到” data = http://www.srcmini.com/pload” 。
import requests
pload = {'username':'Olivia', 'password':'123'}
r = requests.post('https://httpbin.org/post', data = http://www.srcmini.com/pload)
print(r.text)
下面的结果是” httpbin” 网站的JSON结果, 必要的数据是” 表单” , 其密码和用户名均为键, 其值分别为123和Olivia。
文章图片
JSON响应 JSON代表” JavaScript对象表示法” , 它是交换数据格式的最常见方式, 它易于读写, 并且基于通用语言” JavaScript” 。它是一种独立于平台且基于对象的数据格式, 其中数据采用” 键值” 对的形式。如果你想进一步了解JSON, 请在Python教程中查看此JSON数据。
将JSON转换为Python字典 你可以在下面看到” r.json()” 根据” httpbin” 网站给出的JSON响应创建一个Python字典。
import requests
pload = {'username':'olivia', 'password':'123'}
r = requests.post('https://httpbin.org/post', data = http://www.srcmini.com/pload)print(r.json())
从上面的代码获得的结果是Python字典, 并且也显示在” 键值” 中, 如下所示。
文章图片
将JSON转换为Python字典并存储在变量中。 你可以将JSON数据用作Python字典, 并通过使用” r.json()” 执行更多动态操作, 如下所示。
import requests
pload = {'username':'olivia', 'password':'123'}
r = requests.post('https://httpbin.org/post', data = http://www.srcmini.com/pload)
r_dictionary= r.json()
print(r_dictionary['form'])
可以通过’ r_dictionary [‘ form’ ]’ 访问该词典项目, 其中仅在下面显示表单数据。
文章图片
总结 恭喜你你已经完成了本教程, 并了解了HTTP的基础知识。此外, 你还了解了Python中的请求库, 以进行不同类型的请求, 例如” 获取” 以下载图像, 将参数传递给请求, 以及” 发布” 请求以将数据发布到特定路由。最后, 你学习了如何获取JSON响应以进行更动态的操作。
如果你想了解有关Python中HTTP请求的更多信息, 请查看srcmini的Python导入数据(第2部分)课程。
推荐阅读
- Scala中的运算符用法
- 使用R构建数据管道
- 禁用 Gnome Shell 默认的 Ubuntu Dock 和 Ubuntu AppIndicators 扩展
- Android动态添加Fragment
- Android-Java-普通类与抽象类(覆盖)&方法重载
- Geometric Applications of BSTs
- Android-Java-接口Interface
- Android-Java-抽象类
- 零碎*学习安卓开发——使用网咯技术