Cherrypy似乎不适用于curl post请求

时间:2018-06-18 14:22:22

标签: xml curl cherrypy

我有一个奇怪的问题,我有一个xmlrpc clientrequests与Cherrypy服务器一起正常工作。但是,我注意到curl命令不起作用。我明白了:

raise cherrypy.HTTPError(404, message=message)
cherrypy._cperror.HTTPError: (404, 'Missing parameters: data')

我的功能很简单:

class XML(cherrypy._cptools.XMLRPCController):

    @cherrypy.expose
    def POST(self, data):
        cherrypy.response.headers['Content-Type'] = 'application/xml'
        return data

#Option 1
headers = {'Content-Type': 'application/xml'}
r = requests.post('http://localhost:8080/XML/POST', 
                  data=data,  
                  headers=headers,
                  stream=True)
#Option 2
xml_client = xmlrpc.client.ServerProxy('http://localhost:8080/XML/POST')
xml_client.POST(data)

不起作用的选项是:

curl --form data=@data.xml -i -X POST 'http://localhost:8080/XML/POST/' -H 'Content-Type multipart/form-data' -H 'Accept application/soap+xml'

我想知道为什么curl不能像其他两个人一样工作。我确实试图找到原因,但不能! 任何建议将不胜感激!

修改

感谢@cyraxjoe 但是对于答案,因为这是解决方案的一部分,我想让它更容易找到。发现由于各种原因人们建议使用REST而不是XML-RPC,可以看看here。所以我删除了XMLRPCController     class XML():

    @cherrypy.expose
    def POST(self):
        cherrypy.response.headers['Content-Type'] = 'application/xml'
        data = cherrypy.request.body.read()
        return data

希望这也有助于其他人!

1 个答案:

答案 0 :(得分:2)

我认为你必须在冒号的标题(-H)中放置冒号。

curl --form data=@data.xml -i -X POST \
    -H 'Content-Type: multipart/form-data' \
    -H 'Accept: application/soap+xml' 'http://localhost:8080/XML/POST/' 

如果没有它们,则不会配置Accept标头。您可以使用-v选项查看curl发送的内容。