📜  使用Python 的GET 和 POST 请求

📅  最后修改于: 2021-10-19 06:19:13             🧑  作者: Mango

这篇文章讨论了Python的两种 HTTP(超文本传输协议)请求方法 GET 和 POST 请求及其在Python的实现。

什么是 HTTP?
HTTP 是一组旨在实现客户端和服务器之间通信的协议。它用作客户端和服务器之间的请求-响应协议。
Web 浏览器可能是客户端,而托管网站的计算机上的应用程序可能是服务器。

所以,向服务器请求响应,主要有两种方法:

  1. GET :从服务器请求数据。
  2. POST :将要处理的数据提交到服务器。

这是一个简单的图表,它解释了 GET 和 POST 方法的基本概念。 iservice_post_get
现在,要在Python发出 HTTP 请求,我们可以使用几个 HTTP 库,例如:

  • httplib
  • 网址库
  • 要求

上面列出的库中最优雅和最简单的是 Requests。我们将在本文中使用请求库。要下载和安装请求库,请使用以下命令:

pip install requests

或者,从这里下载并手动安装。

发出 Get 请求

# importing the requests library
import requests
  
# api-endpoint
URL = "http://maps.googleapis.com/maps/api/geocode/json"
  
# location given here
location = "delhi technological university"
  
# defining a params dict for the parameters to be sent to the API
PARAMS = {'address':location}
  
# sending get request and saving the response as response object
r = requests.get(url = URL, params = PARAMS)
  
# extracting data in json format
data = r.json()
  
  
# extracting latitude, longitude and formatted address 
# of the first matching location
latitude = data['results'][0]['geometry']['location']['lat']
longitude = data['results'][0]['geometry']['location']['lng']
formatted_address = data['results'][0]['formatted_address']
  
# printing the output
print("Latitude:%s\nLongitude:%s\nFormatted Address:%s"
      %(latitude, longitude,formatted_address))

输出:
GET-and-POST-requests-using-Python

上面的示例通过向 Google Maps API 发送 GET 请求来查找给定位置的纬度、经度和格式化地址。 API(应用程序编程接口)使您能够以有限的方式访问程序的内部功能。在大多数情况下,提供的数据采用 JSON(JavaScript Object Notation)格式(在Python实现为字典对象!)。

要推断的要点:

  • PARAMS = {'address':location}

    GET 请求的 URL 通常带有一些参数。对于请求库,参数可以定义为字典。这些参数稍后会被解析并添加到基本 url 或 api-endpoint。
    要了解参数的作用,请尝试在创建响应对象后打印r.url 。你会看到这样的事情:

    http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university

    这是发出 GET 请求的实际 URL

  • r = requests.get(url = URL, params = PARAMS)

    在这里,我们创建了一个响应对象“r”,它将存储请求-响应。我们使用 requests.get() 方法,因为我们正在发送 GET 请求。我们传递的两个参数是 url 和参数字典。

  • data = r.json()

    现在,为了从响应对象中检索数据,我们需要将原始响应内容转换为 JSON 类型的数据结构。这是通过使用 json() 方法实现的。最后,我们通过解析 JSON 类型对象来提取所需的信息。

发出 POST 请求

# importing the requests library
import requests
  
# defining the api-endpoint 
API_ENDPOINT = "http://pastebin.com/api/api_post.php"
  
# your API key here
API_KEY = "XXXXXXXXXXXXXXXXX"
  
# your source code here
source_code = '''
print("Hello, world!")
a = 1
b = 2
print(a + b)
'''
  
# data to be sent to api
data = {'api_dev_key':API_KEY,
        'api_option':'paste',
        'api_paste_code':source_code,
        'api_paste_format':'python'}
  
# sending post request and saving response as response object
r = requests.post(url = API_ENDPOINT, data = data)
  
# extracting response text 
pastebin_url = r.text
print("The pastebin URL is:%s"%pastebin_url)

此示例说明如何通过将 POST 请求发送到 PSTEBIN API 来将您的source_code粘贴到 pastebin.com。
首先,您需要通过在此处注册来生成 API 密钥,然后在此处访问您的 API 密钥。

此代码的重要功能:

  • data = {'api_dev_key':API_KEY,
            'api_option':'paste',
            'api_paste_code':source_code,
            'api_paste_format':'python'}

    同样,我们需要将一些数据传递给 API 服务器。我们将此数据存储为字典。

  • r = requests.post(url = API_ENDPOINT, data = data)

    在这里,我们创建了一个响应对象“r”,它将存储请求-响应。我们使用 requests.post() 方法,因为我们正在发送 POST 请求。我们传递的两个参数是 url 和数据字典。

  • pastebin_url = r.text

    作为响应,服务器处理发送给它的数据并发送您的source_code的 pastebin URL,它可以通过r.text 轻松访问

requests.post方法可用于许多其他任务,例如填写和提交 Web 表单、使用 Facebook Graph API 在您的 FB 时间轴上发布等。

以下是一些需要思考的重要点:

  • 当方法为 GET 时,所有表单数据都被编码到 URL 中,作为查询字符串参数附加到操作URL。使用 POST,表单数据出现在 HTTP 请求的消息正文中。
  • 在 GET 方法中,参数数据仅限于我们可以填充到请求行(URL)中的内容。使用少于 2K 的参数最安全,有些服务器处理高达 64K。POST 方法没有这样的问题,因为我们在 HTTP 请求的消息体中发送数据,而不是 URL。
  • GET方式发送的数据只允许ASCII字符,POST方式没有这样的限制。
  • 与 POST 相比,GET 的安全性较低,因为发送的数据是 URL 的一部分。因此,在发送密码或其他敏感信息时不应使用 GET 方法。

本博客由Nikhil Kumar 提供。如果您喜欢 GeeksforGeeks 并愿意做出贡献,您也可以使用 write.geeksforgeeks.org 撰写文章或将您的文章邮寄至 review-team@geeksforgeeks.org。在 GeeksforGeeks 主页上查看您的文章并帮助其他 Geeks。