个性化阅读
专注于IT技术分析

在Python中执行HTTP请求

本文概述

查看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请求1

标头

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

r.headers

上面代码中获得的重要信息是服务器名称, 如” Apache”, 内容类型, 编码等。

r.headers['Content-Type']

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

在Python中执行HTTP请求2

响应内容

你可以使用” .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请求3

你还可以使用命令” r.url”查看URL, 如下所示:

print(r.url)

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

在Python中执行HTTP请求4

使用POST请求

POST是最常见的请求方法, 主要用于通过”表单”将数据发送到服务器以在服务器中创建/更新。

你可以将表单数据”发布”到” requests.post”所在的路由, 并制作一个名为” pload”的字典, 并将其作为自变量发送到” data = pload”。

import requests
pload = {'username':'Olivia', 'password':'123'}
r = requests.post('https://httpbin.org/post', data = pload)
print(r.text)

下面的结果是” httpbin”网站的JSON结果, 必要的数据是”表单”, 其密码和用户名均为键, 其值分别为123和Olivia。

在Python中执行HTTP请求5

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 = pload)

print(r.json())

从上面的代码获得的结果是Python字典, 并且也显示在”键值”中, 如下所示。

在Python中执行HTTP请求6

将JSON转换为Python字典并存储在变量中。

你可以将JSON数据用作Python字典, 并通过使用” r.json()”执行更多动态操作, 如下所示。

import requests
pload = {'username':'olivia', 'password':'123'}
r = requests.post('https://httpbin.org/post', data = pload)
r_dictionary= r.json()
print(r_dictionary['form'])

可以通过’r_dictionary [‘form’]’访问该词典项目, 其中仅在下面显示表单数据。

在Python中执行HTTP请求7

总结

恭喜你你已经完成了本教程, 并了解了HTTP的基础知识。此外, 你还了解了Python中的请求库, 以进行不同类型的请求, 例如”获取”以下载图像, 将参数传递给请求, 以及”发布”请求以将数据发布到特定路由。最后, 你学习了如何获取JSON响应以进行更动态的操作。

如果你想了解有关Python中HTTP请求的更多信息, 请查看srcmini的Python导入数据(第2部分)课程。

赞(0)
未经允许不得转载:srcmini » 在Python中执行HTTP请求

评论 抢沙发

评论前必须登录!