用Python调用REST服务
我想打电话给一家休息服务公司。它需要类似于以下语法的内容:用Python调用REST服务,python,web-services,rest,post,Python,Web Services,Rest,Post,我想打电话给一家休息服务公司。它需要类似于以下语法的内容: http://someServerName:8080/projectName/service/serviceName/ param1Name/param1/param2Name/param2 我必须用POST连接到它。我试着在网上阅读(比如说…)。。。但这是我的问题: 如果我尝试使用HTTP get请求方法,通过构建自己的路径,如下所示: BASE_PATH = "http://someServerName:8080/pr
http://someServerName:8080/projectName/service/serviceName/
param1Name/param1/param2Name/param2
我必须用POST连接到它。我试着在网上阅读(比如说…)。。。但这是我的问题:
如果我尝试使用HTTP get请求方法,通过构建自己的路径,如下所示:
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/"
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2)
params = { "param1" : param1, "param2" : param2 }
urllib.urlopen(BASE_PATH, urllib.urlencode(params))
它给了我一个错误,说GET是不允许的
如果我尝试使用HTTP post请求方法,如下所示:
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/"
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2)
params = { "param1" : param1, "param2" : param2 }
urllib.urlopen(BASE_PATH, urllib.urlencode(params))
它返回一个404错误,并显示消息请求的资源()不可用。
当我调试这个时,它似乎正在将参数构建到查询字符串中(“param1=where¶m2=where”…)
如何使用POST,但按预期传递由斜杠分隔的参数?我做错了什么
urllib2
params={“param1”:param1,“param2”:param2}
urllib2.urlopen(基本路径+”?“+urllib.urlencode(参数),”)
可能有用类似的方法可能会奏效:
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\u plus
允许您转义特殊字符,而无需被迫进入&key=value
方案。我知道这有点不公平,但这就是最终发生的情况。。。负责REST服务的程序员将其更改为使用&key=value
语法。这似乎不起作用…:(我收到与以前相同的“请求的资源不可用”错误。你确定你能够访问该资源吗?你需要先验证你自己吗?你能给我们url以便我们进行测试吗?