2017-08-31 34 views
0

使用Python 3.5的時候,並請2.18.4我需要將數據發送到另一個服務無法requests.post,它目前沒有出於某種原因。 發送是在我接收並清除來自另一個服務的數據後進行的,並最終將數據驗證並設置爲本機python字典。 這工作時的數據是硬編碼的,我沒有使用的輸入數據(硬編碼的JSON字符串):使用json.dumps

def my_post_method(self, url, data): 
    # import requests (above) 
    return requests.post(
     url, 
     data='{"keyA":"valA", "keyB":"valB" ... }', 
     headers={'Content-Type': 'application/json'}, 
    ) # status 200 

但我不能由於某種原因原始數據發送。從上面

def my_post_method(self, url, data): 
    # import requests, json (above) 
    d = json.dumps(data) 
    return requests.post(
     url, 
     data=d, 
     headers={'Content-Type': 'application/json'}, 
    ) # status 400 

d:{"keyA":"valA", "keyB":"valB" ... }

我試圖使用請求JSON參數,而不是數據,但其他服務在另一端顯然期望數據參數。 這是否意味着我發佈的服務正在等待一個json格式的字符串?

+0

我們可以知道其他服務?我們可以嘗試一些公開的東西嗎? – GendoIkari

+0

您是否嘗試再次使用硬編碼字符串進行POST?服務是否可能返回400秒,因爲它不希望您兩次提交相同的請求? –

+0

謝謝@Rob瓦,但我回答如下─一些奇怪的原因,鍵 - 值的順序被考慮到當接收端被驗證傳入的數據。我真的不知道爲什麼... – camelBack

回答

2

如果您至少使用版本2.4.2的請求,則完全避免使用json.dumps,我會使用接受Python字典的requests.post中的參數json

More complicated requests

編輯: 我不能重現該問題以任何方式,json應該工作,它發送一個JSON與現代requests後的唯一正確途徑。

+0

我不能 - 當我(我上面寫的) 我應該降級我請求失敗? (2.18.4-> 2.4.2) – camelBack

+0

你有沒有指定內容類型的'json'? – GendoIkari

+0

是,仍然沒有 – camelBack