如何在Python中发送和接收HTTP POST请求

25

我需要一个简单的客户端方法,可以在HTTP POST请求中发送布尔值,并且有一个服务器端函数可以监听并将POST内容保存为变量。

我在寻找如何使用httplib的信息时遇到了麻烦。

请向我展示一个简单的示例,使用localhost进行http连接。

1个回答

32

对于客户端,您可以使用内置选项urllib.request模块。对于更高级别的客户端,请尝试requests。它非常直观且易于使用/安装。

对于服务器端,我建议您使用像FlaskBottleTornado这样的小型Web框架。它们很容易使用且轻量级。

例如,使用requests发送post变量foo的小型客户端代码如下:

import requests
r = requests.post("http://yoururl/post", data={'foo': 'bar'})
# And done.
print(r.text) # displays the result body.

而接收并使用 Flask 处理 POST 请求的服务器端代码如下:

from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def result():
    print(request.form['foo']) # should display 'bar'
    return 'Received !' # response to your request.

这是使用Python发送/接收POST请求最简单且最快速的方法。


抱歉问这个愚蠢的问题,但我有点困惑。r.text是什么,在客户端中,foo和bar代表什么?(不知道是否有所改变,但两个脚本都在Linux上运行,服务器端在安装了Apache的Linux上运行) - Idan S
没问题。使用 requests 库发送请求时,你将获得一个结果对象(在示例中存储在变量“r”中)。该对象的一个属性是 "text",它包含了结果正文(例如响应的 HTML)。Foo 和 bar 只是一个键值对的随机示例(想象一下,如果你填写一个表单,有用户和密码字段,request.form ['user'] 将给你所输入的数据,对于 request.form ['password'] 也是如此)。 - Artemis
非常感谢!还有一个问题,当我在Linux服务器上安装Apache并将其作为Web服务器时,它是否知道如何接收POST/GET请求,或者需要编写一些PHP或类似的东西? - Idan S
哦,现在我明白了,对我来说使用Apache服务器非常关键,那么我该怎么做呢?问题是这样的:我有一个客户端需要与运行Apache的服务器通信,他需要使用HTTP请求告诉服务器“我还活着”,仅此而已。 - Idan S
1
请修复此代码 @app.route('/post', methods=['POST']) 。路由应为 '/post' 而不是 '/'。 - Long
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接