在Python中执行HTTP请求

本文概述

  • HTTP
  • Python中的库发出HTTP请求
  • 用Python请求
  • 使用GET请求
  • 使用请求模块下载和保存图像
  • 在请求中传递参数
  • 使用POST请求
  • JSON响应
  • 总结
查看srcmini的Python导入数据(第2部分)课程, 该课程涵盖了发出HTTP请求的过程。
在本教程中, 我们将介绍如何下载图像, 将参数传递给请求, 以及如何执行” 发布” 请求以将数据发布到特定路线。此外, 你还将学习如何获取JSON响应以进行更动态的操作。
  • HTTP
  • Python中的库发出HTTP请求
  • 用Python请求
  • 使用GET请求
  • 使用请求模块下载和保存图像
  • 在请求中传递参数
  • 使用POST请求
  • JSON响应
HTTP HTTP代表” 超文本传输??协议” , 其中可以通过客户端的请求和服务器的响应进行通信。
例如, 你可以使用客户端(浏览器)在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″ (即” 确定” ), 并且请求成功。
在Python中执行HTTP请求

文章图片
标头 你可以使用” .headers” 查看响应头。返回Python字典的位置。它们返回许多附加信息, 其中包括不区分大小写的名称, 资源类型以及服务器名称, 版本等, 并且还包括在下面显示的代码中。
r.headers

上面代码中获得的重要信息是服务器名称, 如” Apache” , 内容类型, 编码等。
r.headers['Content-Type']

你可以使用不区分大小写的” content-type” 在上方查看标头内容的类型, 并且” Content-Type” 也将获得与以下相同的结果。
在Python中执行HTTP请求

文章图片
响应内容 你可以使用” .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)

在Python中执行HTTP请求

文章图片
你还可以使用命令” r.url” 查看URL, 如下所示:
print(r.url)

执行此操作后的输出是URL, 其中包含你在” ?” 之后以键值形式设置的字典。标志。
在Python中执行HTTP请求

文章图片
使用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。
在Python中执行HTTP请求

文章图片
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字典, 并且也显示在” 键值” 中, 如下所示。
在Python中执行HTTP请求

文章图片
将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’ ]’ 访问该词典项目, 其中仅在下面显示表单数据。
在Python中执行HTTP请求

文章图片
总结 恭喜你你已经完成了本教程, 并了解了HTTP的基础知识。此外, 你还了解了Python中的请求库, 以进行不同类型的请求, 例如” 获取” 以下载图像, 将参数传递给请求, 以及” 发布” 请求以将数据发布到特定路由。最后, 你学习了如何获取JSON响应以进行更动态的操作。
如果你想了解有关Python中HTTP请求的更多信息, 请查看srcmini的Python导入数据(第2部分)课程。

    推荐阅读