Python - 如何进行REST POST请求

2024-10-02 18:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Java实现了一个REST服务:

@POST
@Path("/policyinjection")
@Produces(MediaType.APPLICATION_JSON) 
public String policyInjection(String request) {

    String queryresult = null;
    String response = null;

    if (request == null) {
        logger.warning("empty request");
    } else {

        //call query() to query redisDB with the request
        queryresult = query(request);

        // call inject() to inject returned policy to floodlight
        response = inject(queryresult);

    }
    return response;
}

但是我需要使用Python来实现客户机对上述服务发出POST请求。 我是python新手,我想实现一个方法,如下所示:

^{pr2}$

Tags: topathreststringresponserequestjavacall
3条回答

我专门为此制作了Nap,看看吧!在

用法示例:

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

我不确定这是否是您的问题的答案,但是您应该看看^{}模块。在

它允许在一行中发送http POST请求(以及(m)任何其他http方法):

>>> import requests

>>> keys = {'username':'Sylvain', 'key':'6846135168464431', 'cmd':'do_something'}
>>> r = requests.post("http://httpbin.org/post",params=keys)

现在,答案在r对象中:

^{pr2}$

。。。这些只是例子。有关详细信息,请参阅请求文档response content。在

您可以使用requests库。我不谈这个,因为已经有人回答了。在

也可以使用urllib和urllib2:

import urllib
import urllib2

data = {
    'user': 'username',
    'pass': 'password'
}

urllib2.urlopen('http://www.example.com/policyinjection/', urllib.urlencode(data))

urllib2.urlopen的secode参数是与请求一起发送的数据。它是可选的,但是如果您使用它,您的请求将自动变为POST。urllib与其他解决方案相比的优势在于它是标准发行版的一部分,因此您不会向应用程序添加任何额外的依赖项。在

如果您想要性能,您应该使用pycurl

^{pr2}$

不幸的是,pycurl不是标准发行版的一部分,但是您可以使用pip install pycurl或{}来安装它。在

相关问题 更多 >