本文讨论了Python中的两种HTTP(超文本传输协议)请求方法GET和post请求,以及它们在Python中的实现。
什么是HTTP? HTTP是一组协议,旨在实现客户端和服务器之间的通信。它是客户端和服务器之间的请求-响应协议。 web浏览器可以是客户端,而托管网站的计算机上的应用程序可以是服务器。
因此,要从服务器请求响应,主要有两种方法:
- 收到 :从服务器请求数据。
- 邮递 :将要处理的数据提交到服务器。
下面是一个简单的图表,解释了GET和POST方法的基本概念。 现在,要在python中发出HTTP请求,我们可以使用以下几个HTTP库:
上面列出的库中最优雅、最简单的是Requests。在本文中,我们将使用请求库。要下载并安装请求库,请使用以下命令:
pip install requests
或者,从 在这里 并手动安装。
提出Get请求
# importing the requests library import requests # api-endpoint # 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:%sLongitude:%sFormatted Address:%s" % (latitude, longitude,formatted_address)) |
输出:
上面的示例通过向Google Maps API发送GET请求来查找给定位置的纬度、经度和格式化地址。API(应用程序编程接口)使您能够以有限的方式访问程序的内部功能。在大多数情况下,提供的数据都是 JSON(JavaScript对象表示法) 格式(在Python中作为字典对象实现!)。 需要推断的要点:
-
PARAMS = {'address':location}
GET请求的URL通常带有一些参数。对于请求库,参数可以定义为字典。这些参数稍后会被解析并添加到基本url或api端点。 要了解参数角色,请尝试打印 r、 网址 创建响应对象之后。你会看到这样的情况:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university
这是发出GET请求的实际URL
-
r = requests.get(url = URL, params = PARAMS)
在这里,我们创建一个响应对象“r”,它将存储请求响应。我们使用请求。方法,因为我们正在发送get请求。我们传递的两个参数是url和参数字典。
-
data = r.json()
现在,为了从响应对象检索数据,我们需要将原始响应内容转换为JSON类型的数据结构。这是通过使用json()方法实现的。最后,我们通过解析JSON类型的对象来提取所需的信息。
发帖请求
# importing the requests library import requests # defining the api-endpoint # 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) |
这个例子解释了如何粘贴你的 源代码 到 巴斯德宾。通用域名格式 通过向PASTEBIN API发送POST请求。 首先,您需要通过 在这里注册 然后访问你的 这里是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”,它将存储请求响应。我们使用请求。方法,因为我们正在发送post请求。我们传递的两个参数是url和数据字典。
-
pastebin_url = r.text
作为响应,服务器处理发送给它的数据,并发送用户的pastebin URL 源代码 可以通过 r、 文本 .
请求。邮递 该方法可以用于许多其他任务,如填写和提交网络表单,使用Facebook Graph API在FB时间线上发布等。
以下是一些需要思考的要点:
- 当方法为GET时,所有表单数据都被编码到URL中,并附加到 行动 URL作为查询字符串参数。使用POST时,表单数据将显示在 消息体 HTTP请求的一部分。
- 在GET方法中,参数数据仅限于我们可以填充到请求行(URL)中的内容。最安全的方法是使用不到2K的参数,有些服务器最多可以处理64K的参数。在POST方法中没有这样的问题,因为我们发送了数据 消息体 而不是URL。
- GET方法中只允许使用ASCII字符发送数据。POST方法中没有这样的限制。
- GET比POST更不安全,因为发送的数据是URL的一部分。因此,在发送密码或其他敏感信息时,不应使用GET方法。
本博客由 尼希尔·库马尔 .如果你喜欢GeekSforgeks并想贡献自己的力量,你也可以用write写一篇文章。极客。组织或邮寄你的文章进行评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。