用Python测试RESTful API的POST请求

9 投票
3 回答
13289 浏览
提问于 2025-04-16 19:48

我正在测试一个我正在开发的RESTful接口(我用的是这个:codeigniter-restserver),我想用Python来实现。

我发现GET请求似乎没问题,但在POST请求上遇到了一些麻烦。我并不是想了解这个库的所有细节,而只是想搞清楚如何用Python来测试POST请求。这是我目前的代码:

import httplib, urllib

params = urllib.urlencode({
    'sentence':     'esta es una frase',
    'translation':  'this is a sentence'
})

headers = {
    "Content-type": "application/x-www-form-urlencoded", 
    "Accept":       "text/plain"
}

conn = httplib.HTTPConnection("localhost:80")
conn.request("POST", "/myapp/phrase", params, headers)

response = conn.getresponse()
print response.status, response.reason

data = response.read()
conn.close()

这个脚本能用来测试POST请求吗?我在Stack Overflow上看到很多人想找图形界面的工具来做这个(比如Firefox插件,等等),但对我来说,构建RESTful应用的主要目的就是有一个可以用脚本快速修改数据库的API。(比如用JSON文件里的数据填充数据库,随便什么。)

我用Python的方法是不是对的呢?

谢谢!

3 个回答

0

还有一个叫做 Nap 的工具,它其实是对请求库的一个封装,使用起来更方便,特别是用来调用 HTTP 接口的时候。

下面是一个使用的例子:

from nap.url import Url
api = Url('http://httpbin.org/')

response = api.post('post', data={'test': 'Test POST'})
print(response.json())

更多例子可以查看这里: https://github.com/kimmobrunfeldt/nap#examples

声明:我是 nap 的作者。

21

直接使用 httplib 来写代码是可以的,但这个方法比较底层,不够简单。

你可以看看 Requests 这个模块。它提供了一种非常简单且符合Python风格的方法来创建和发送HTTP请求。

import requests

requests.post(url, data={}, headers={}, files={}, cookies=None, auth=None)
2

通常情况下,POST请求是通过一个更高级的函数来完成的,这个函数叫做urllib2。

headers = {'User-Agent': user_agent}

data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)

撰写回答