簡體   English   中英

使用Python調用REST服務

[英]Calling a REST service with Python

我有一個我想要調用的REST服務。 它需要類似於以下語法的東西:

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)

它給了我一個錯誤,說不允許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但是按預期傳遞由斜杠分隔的參數? 我究竟做錯了什么?

我知道這有點不公平,但這就是最終發生的事情......負責REST服務的程序員將其更改為使用&key=value語法。

  1. 使用urllib2
  2. 你必須要聰明; 就像是

    params = { "param1" : param1, "param2" : param2 }

    urllib2.urlopen(BASE_PATH + "?" + urllib.urlencode(params), " ")

    可能會工作。

像這樣的東西可能會起作用:

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方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM