Cherrypy 似乎不适用于 curl post 请求
Cherrypy does not seem to work with curl post request
我有一个奇怪的问题,我的 xmlrpc client
和 requests
在 Cherrypy 服务器上运行良好。但是,我注意到 curl 命令不起作用。我得到:
raise cherrypy.HTTPError(404, message=message)
cherrypy._cperror.HTTPError: (404, 'Missing parameters: data')
我的cherrypy函数很简单:
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 不能像其他两个那样使用 cherrypy。我确实试图找到一个原因,但找不到!
任何建议将不胜感激!
编辑:
感谢@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
希望这对其他人也有帮助!
我认为你必须在 curl 的 header (-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
header 就没有配置。您可以使用 -v
选项查看 curl 发送的内容。
我有一个奇怪的问题,我的 xmlrpc client
和 requests
在 Cherrypy 服务器上运行良好。但是,我注意到 curl 命令不起作用。我得到:
raise cherrypy.HTTPError(404, message=message)
cherrypy._cperror.HTTPError: (404, 'Missing parameters: data')
我的cherrypy函数很简单:
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 不能像其他两个那样使用 cherrypy。我确实试图找到一个原因,但找不到! 任何建议将不胜感激!
编辑:
感谢@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
希望这对其他人也有帮助!
我认为你必须在 curl 的 header (-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
header 就没有配置。您可以使用 -v
选项查看 curl 发送的内容。