2017-07-14 66 views
3

我正在嘗試使用urllib2做一個http put。Python使用urllib2 PUT失敗

服務器管理員說需要提供以下列格式中的數據: {「類型」:「存儲」,「數據」:[「9953」]}

我的代碼如下:

url = 'https://url.com/polling/v1/5cb401c5-bded-40f8-84bb-6566cdeb3dbb/stores' 
request = urllib2.Request(url, data='{\"type\":\"store\",\"data\":[\"9953\"]}') 
request.add_header("Authorization", "Basic %s" % creds) 
request.add_header("Content-type", "application/json") 
request.add_header("Accept", "application/json") 
print "Data: %s" % request.get_data() 
print "Accept: %s" % request.get_header("Accept") 
print "Content-Type: %s" % request.get_header("Content-type") 
print "Authorization: %s" % request.get_header("Authorization") 
try: 
    result = urllib2.urlopen(request, data) 
except urllib2.HTTPError as e: 
    print e.read() 
    exit() 
data = json.loads(result.read()) 
print data 

我的輸出,當我運行是這樣的:

Data: {"type":"store","data":["9953"]} 
Accept: application/json 
Content-Type: application/json 
Authorization: Basic U1lTQ1RMOmFiYzEyMw== 

這正是我被告知要送

但我發現了以下錯誤:

BWEB000065: HTTP Status 400 - org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for ARRAY (from [Source: org.jboss.resteasy.co[email protected]695dd38d; line: 2, column: 15]) 

任何幫助,將不勝感激。

+1

你爲什麼要逃避雙引號(「)單引號(')內(L2? ) – Mark

+0

應用程序管理員告訴我「確保您正確地轉義您的雙引號」。刪除轉義字符會得到相同的結果。 – user1864311

回答

2

通知這些2行代碼:

request = urllib2.Request(url, data='{\"type\":\"store\",\"data\":[\"9953\"]}') 

result = urllib2.urlopen(request, data) 

在第一行中,則是通過使data命名參數設定爲有效載荷JSON初始化請求。這似乎是正確的。

但是,第二行傳入data,覆蓋您在第一行中初始化的有效載荷。我假設data這裏是你程序的較大上下文中的一些變量(原始問題中未顯示),並且此data變量被設置爲某個不同的值,可能是無效的JSON負載。

如果在第一行的有效載荷正確初始化,那麼我建議改變第二行這樣的:

result = urllib2.urlopen(request)