用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以便我们进行测试吗?