Python 获取请求与发布请求,有什么区别?

104 阅读7分钟

当用户在 "上网"、浏览网页和与网络资源交互时,有许多事情实际上正在发生,而这些事情并不总是显而易见。由于Python的流行,Python常常在其中扮演着重要的角色。了解Python获取请求和发布请求的处理过程以及两者之间的差异,有助于我们编写更好的软件,并揭开互联网 "坚果和螺栓 "的神秘面纱,以便我们能够更好地利用它。当我们试图与REST服务器交互时,这尤其有用。继续阅读,了解PyScripter--最好的Windows 10 Python IDE(或者说任何版本的Windows)如何提供众多优势,帮助我们编写、调试和理解Python Get请求的工作原理。

Python Get request 在互联网通信中扮演什么角色?

网络服务器计算机上的网络服务器软件收到来自客户端 PC 或设备的 HTTP 请求。这个请求是为了访问一个服务器资源,如网页、图像、声音文件、电影或几乎所有可以在互联网上传输的东西。客户端使用一个URL(统一资源定位器)来提交请求,它包含访问资源所需的数据。主要的或最经常使用的是POST、GET、PUT、PATCH和DELETE等HTTP方法。每种方法都执行一个特定的动作;例如,Python的get请求函数使你能够使用互联网从数据源获取数据。

本文将重点介绍两个流行的Python请求模块。 GETPOST 请求。

什么是REST API?

REST API,通常被称为RESTful API,是一种符合REST架构风格限制的网络API,能够与RESTful网络服务进行通信。计算机科学家Roy Fielding想出了REST这个缩写,它代表了表征性状态转移。

什么是HTTP请求?

HTTP协议或超文本传输协议使用的是客户-服务器架构。通常情况下,服务器是托管网站的机器,而客户端是网络浏览器。为了 在 Python 中进行 HTTP 请求,我们利用 requests 模块。除了处理请求和响应数据外,它还可以处理 HTTP 通信的许多其他元素。认证、压缩、解压、分块请求等等,都是支持的。

在具有以下格式的请求信息中,HTTP客户端向服务器发送一个HTTP请求。

  • 一个请求行
  • 零个或多个头(General|Request|Entity)字段,后面是CRLF
  • 一个空行(即CRLF前面没有任何东西),表示头字段的结束。
  • 可以选择一个信息体

请求行

Request-Line以一个方法标记开始,然后列出Request-URI、协议版本,最后是CRLF。空格SP字母被用来分隔各部分。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

哪些HTTP请求方法是可用的?

请求方法表示在由给定的Request-URI识别的资源上要执行的方法。该方法是区分大小写的,应该总是以大写字母提及。下面列出了HTTP/1.1中所有支持的方法。

  • GET
  • HEAD
  • POST
  • PUT
  • DELETE
  • 连接
  • 追踪

如前所述,我们将只关注GET和POST请求方法的区别。

什么是GET方法,它是如何工作的?

可以使用提供的URI和GET技术从服务器上检索信息。通过GET请求,数据只能被检索,而不能以任何其他方式改变。

下面是一个做GET请求的例子。

# importing the requests library
import requests

# api-endpoint
URL = "http://maps.googleapis.com/maps/api/geocode/json"

# location is 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:%snLongitude:%snFormatted Address:%s"
%(latitude, longitude,formatted_address))

上面的例子向谷歌地图API发出了一个GET请求,以获得一个特定地点的纬度、经度和格式化地址。

什么是POST方法,它是如何工作的?

POST请求是在通过HTML表单向服务器发送数据时利用的,如客户信息、文件上传等。

一个提出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)

通过向PASTEBIN API提交POST请求,这个例子展示了如何将你的源代码发布到pastebin.com。

HTTP GET和POST请求之间的区别是什么?

Get和Post方法在表单提交中的作用是什么?

METHOD="GET"METHOD="POST" 从根本上说是不同的,因为它们涉及到HTTP标准中规定的各种HTTP请求。这两种技术都是从让浏览器创建一个表单数据集开始的,随后根据 enctype 属性的指示 对其 进行编码 。虽然只有 application/x-www-form-urlencoded 是允许的 METHOD="GET”的enctype 属性 ,而 METHOD="POST” 可以是 multipart/form-data or application/x-www-form-urlencoded.一旦表单数据被发送,服务器就会收到这个表单数据的集合。

当 METHOD="GET "用于 提交表单时,浏览器会创建一个URL,首先在action属性的值中 添加一个"?",然后附加表单的数据集(使用 应用程序/x-www-form-urlencoded content type )。然后浏览器处理这个URL,就像处理一个链接一样。

当一个带有 METHOD="POST"的表单 被提交时, 会使用action属性的值发出 一个 POST 请求,并使用enctype属性指定的内容类型构造一个消息。

对于服务器端的处理,Python的GET请求和POST请求的工作方式有什么不同?

理论上,一个表单提交是否被处理取决于它是使用 METHOD="GET"METHOD="POST" 来发送数据。由于数据的编码方式不同,所以需要不同的解码技术。因此,一般来说,改变METHOD可能需要改变处理提交的脚本。例如,在利用CGI接口时,当GET被用于环境变量(QUERYSTRING )时,脚本会接收数据。然而,当使用POST时,表单数据是通过标准输入流发送的(stdin),Content-length标头指定了必须读取多少字节的数据。

GET 和 POST 变量的冲突

在某些语言中,比如PHP,来自GET和POST参数的数据可以独立使用,并合并到一个方便的变量中。在PHP中,这个变量被称为$_REQUEST 。如果出现冲突--当相同的参数名称在GET和POST中使用不同的值时,争端将根据一组标准来处理。PHP中的变量顺序配置指令决定了优先级的顺序。EGPCS是默认顺序(环境、GET、POST、Cookie、服务器)。这表明$_GET 中的变量优先于$_POST 中的变量,而$_COOKIE 中的变量优先于 。

与POST请求相比,Python GET请求的推荐用法是什么?

当发送 "无用的 "表单时,或者那些不 "对世界的状况产生实质性影响 "的表单,建议使用GET。当涉及到数据库变化或其他操作时,建议使用POST。

与 "POST "请求相比,"GET "请求经常是可以缓存的。由于缓存可以为最常见的搜索提供服务,这可能会大大影响查询系统的效率,特别是当查询字符串很短的时候。即使对于空闲的请求,有时也建议利用POST。

即使对于空闲的请求,有时也建议利用POST。

  1. METHOD="GET" 如果表单数据包含非ASCII字符,如重音字符,则不适用,即使它可以在现实中发挥作用(主要针对ISO Latin 1字符)。
  2. 当处理那些不能处理冗长的URL的实现时,如果表单数据集很大--比如说,数百个字符,METHOD="GET" 可能会成为问题。
  3. 避免使用METHOD="GET" ,将有助于用户理解表单的工作方式,并使 "隐藏 "字段(INPUT TYPE="HIDDEN")更加隐藏,因为它们不会被包含在URL中。然而,即使你使用了PyScripter,隐藏的字段仍然会在HTML源代码中可见。METHOD="POST."

为什么要使用 PyScripter 作为我的 Python IDE?

获得 MIT 许可的 PyScripter 是一个轻量级的、功能丰富的、免费的、开源的特定 Python IDE,由 Kiriakos Vlahos 创建,他之前创建了 Python4Delphi。这个库在Delphi中连接了Python和Object Pascal,自2015年以来,项目的SourceForge网站只有大约120万次下载。它是在Delphi中借助SynEdit制作的,SynEdit是在Pascal中创建的一个复杂的多行编辑控件。

一个强大的、轻量级的、适应性强的、灵活的Python IDE是PyScripter。因为它只为Windows系统设计,所以它在那里的操作比臃肿的文本编辑器、万能的IDE或其他Python跨平台IDE更快速有效。