我有一个我想要调用的REST服务。它需要类似于以下语法的内容:
http://someServerName:8080/projectName/service/serviceName/
param1Name/param1/param2Name/param2
我必须使用POST连接到它。我尝试在线阅读(例如here和here)......但这是我的问题:
如果我尝试使用HTTP get request方法,可以构建我自己的路径,如下所示:
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/"
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2)
它给我一个错误,说不允许GET。
如果我尝试使用HTTP post请求方法,请执行以下操作:
params = { "param1" : param1, "param2" : param2 }
urllib.urlopen(BASE_PATH, urllib.urlencode(params))
它返回404错误以及消息The requested resource () is not available.
当我调试它时,它似乎将params构建成一个查询字符串(“param1 = whatever& param2 = whatever”......)
我如何使用POST但是按预期传递由斜杠分隔的参数?我做错了什么?
答案 0 :(得分:5)
我知道这有点不公平,但最终会发生这种情况......负责REST服务的程序员将其更改为使用&key=value
语法。
答案 1 :(得分:2)
urllib2
你必须要聪明;
之类的东西 params = { "param1" : param1, "param2" : param2 }
urllib2.urlopen(BASE_PATH + "?" + urllib.urlencode(params), " ")
可能会工作。
答案 2 :(得分:0)
这样的事可能有用:
param1, param2 = urllib.quote_plus(param1), urllib.quote_plus(param2)
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/"
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2, " ")
urlopen
的第二个参数告诉它使用空数据执行POST请求。 quote_plus
允许您在不强制进入&key=value
方案的情况下转义特殊字符。