开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python GET/POST 请求

本教程展示了如何在Python中发送GET和POST请求。在示例中,我们使用了requesturllib3socket模块。我们还展示了如何在Flask中处理GET或POST请求。

HTTP

超文本传输​​协议(HTTP)是分布式协作超媒体信息系统的应用协议。HTTP是万维网数据通信的基础。

在示例中,我们使用免费提供的HTTP请求和响应服务httpbin.org和一个微型HTML页面webcode.me用于测试。

HTTP获取

HTTPGET方法请求指定资源的表示。

GET请求:

  • 应该只用于请求资源
  • 参数显示在URL中
  • 可以缓存
  • 保留在浏览器历史中
  • 可以添加书签
  • 在处理敏感数据时绝不能使用
  • 有长度限制

HTTP发送

HTTPPOST方法向服务器发送数据。它通常在上传文件或提交完整的网络表单时使用。

POST请求:

  • 应该用于创建资源
  • 参数不显示在URL中
  • 从不缓存
  • 不保留在浏览器中history
  • 不能加书签
  • 处理敏感数据时可以使用
  • 没有长度限制

Pythonurllib3

urllib3模块是一个功能强大、对Python友好的HTTP客户端。

$ pip install urllib3

我们使用pip安装urllib3模块。

Python请求

Requests是一个简单而优雅的PythonHTTP库。它提供了通过HTTP访问Web资源的方法。它是根据ApacheLicense2.0发布的。它是最流行的Python包之一。

$ pip install requests

我们安装了request模块。

Python烧瓶

Flask是最流行的Python微型Web框架。大多数功能都可以作为扩展使用,包括验证、表单处理、对象关系映射器或身份验证。Flask基于WerkzeugWSGItoolkit和Jinja2模板引擎。

$ pip install Flask

我们安装Flask。

使用urllib3的PythonGET请求

GET请求是使用request方法创建的,该方法接收'GET'值作为其第一个参数。

#!/usr/bin/python

import urllib3

http = urllib3.PoolManager()

url = 'http://webcode.me'

resp = http.request('GET', url)
print(resp.data.decode('utf-8'))

GET请求被发送到webcode.me。

$ ./get_req.py 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My html page</title>
</head>
<body>

    <p>
        Today is a beautiful day. We go swimming and fishing.
    </p>
    
    <p>
         Hello there. How are you?
    </p>
    
</body>
</html>

使用urllib3的PythonPOST请求

POST请求是使用request方法创建的,该方法接收'POST'值作为其第一个参数。

#!/usr/bin/python

import urllib3
import certifi

http = urllib3.PoolManager(ca_certs=certifi.where())

url = 'https://httpbin.org/post'

req = http.request('POST', url, fields={'name': 'John Doe', 
    'occupation': 'gardener'})
print(req.data.decode('utf-8'))

POST请求被发送到httpbin.org/post。

$ ./post_req.py 
{
    "args": {}, 
    "data": "", 
    "files": {}, 
    "form": {
    "name": "John Doe", 
    "occupation": "gardener"
    }, 
    "headers": {
    "Accept-Encoding": "identity", 
    "Content-Length": "230", 
    "Content-Type": "multipart/form-data; boundary=510415c9b680823ee5512359fa1b3d22", 
    "Host": "httpbin.org", 
    "X-Amzn-Trace-Id": "Root=1-5f159c14-fc386023685d681205723862"
    }, 
    ...
    "url": "https://httpbin.org/post"
}

带有请求的PythonGET请求

使用get方法生成GET请求。

#!/usr/bin/python

import requests as req

resp = req.get("http://webcode.me")

print(resp.text)

GET请求被发送到webcode.me。

带有请求的PythonPOST请求

使用post方法生成POST请求。

#!/usr/bin/python

import requests as req

data = {'name': 'Peter'}

resp = req.post("https://httpbin.org/post", data)
print(resp.text)

POST请求被发送到httpbin.org/post。

Python在Flask中处理GET请求

以下示例展示了如何在Flask应用程序中处理GET请求。

#!/usr/bin/python

from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def index():

    return 'Home page'


@app.route('/greet', methods=['GET'])
def greet():

    name = request.args.get('name', 'Guest')
    msg = f'Hello {name}'

    return msg, 200, {'Content-Type': 'text/plain; charset=utf-8'}

应用程序创建消息并将其发送到客户端。它使用名称查询参数中的值。

@app.route('/greet', methods=['GET'])
def greet():
...

greet函数映射到/greet路径和GET类型请求。

$ export FLASK_APP=app.py
$ flask run

我们运行应用程序。

$ curl -i localhost:5000/greet?name=Lucia
HTTP/1.0 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 11
Server: Werkzeug/1.0.0 Python/3.8.3
Date: Mon, 20 Jul 2020 13:37:38 GMT

Hello Lucia

我们使用curl工具向应用程序创建GET请求。使用-i选项,我们还包括响应标头。

Python在Flask中处理POST请求

以下示例展示了如何在Flask中处理POST请求。

#!/usr/bin/python

from flask import Flask, make_response

app = Flask(__name__)


@app.route('/')
def hello():
    return 'Home page'


@app.route('/users/<name>', methods=['POST'])
def create_user(name):

    msg = f'user {name} created'
    return make_response(msg, 201)

要处理POST请求,我们在methods参数中指定方法名称。

$ export FLASK_APP=app.py
$ flask run

我们运行应用程序。

$ curl -X POST localhost:5000/users/Peter/
user Peter created

一个POST请求被创建。

列出所有Python教程。

未经允许不得转载:我爱分享网 » Python GET/POST 请求

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏