我目前使用curl把HTTP請求的URL中的shell腳本如下:無單String構造/工廠方法
RES=`curl $USER -X PUT -H "Accept: application/json" -H "Content-Type: application/json" -s -o /dev/null -w "%{http_code}" -d "{\"type\":\"$TYPE\",\"data\":[${STORES}]}" ${STR}`
這一切正常。但是,我試圖用Python重寫這個,但我努力讓它工作。
url = 'https://url.com/polling/v1/5cb401c5-bded-40f8-84bb-6566cdeb3dbb/stores'
data = urllib.urlencode({"type":"store","data":"9953"})
request = urllib2.Request(url)
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
我得到的例外是「JBWEB000065:HTTP狀態400 - org.codehaus.jackson.map.JsonMappingException:無法實例類型[簡單類型,類com.sherwin.polling.push的價值。 nouns.util.StoreForm]從JSON字符串;沒有單字符串構造函數/工廠方法「
我假設這意味着服務器(我沒有訪問此代碼)獲取數據作爲單個字符串,但構造函數需要兩個字符串?如果是這樣,我將如何構造這是兩個字符串?如果不是,我可能會做錯什麼?
編輯:服務器管理員告訴我,我需要格式化我的數據,如 {「類型」:「存儲」,「數據」:「9953」]} 所以我改成:
data = urllib.urlencode({"type":"store","data":["9953"]})
但它也不管用, 我在這裏看到的數據輸出 數據:數據=%5B%279953%27%5D &類型=店
編輯:我剝出的編碼和給您寄它作爲一個字符串:
request = urllib2.Request(url, data='{"type":"store","data":["9953"]}')
所以現在我的數據輸出相匹配的是什麼應該看起來像 數據:{「類型」:「存儲」,「數據」:「9953」]}
但現在我越來越: org.codehaus.jackson.JsonParseException:意外的輸入結束:ARRAY的預期關閉標記(來自:[source:org.jboss.resteasy.co[email protected]614ba804;行:2,列:15])
任何幫助,將不勝感激。謝謝。