首先,我會捲曲調用,這樣服務器就知道什麼期望添加-H "Content-Type: text/xml"
的頭。如果您發佈了服務器代碼(不一定是所有內容,但至少發生了什麼問題),這將會很有幫助。
要調試這個我會用
@app.before_request
def before_request():
if True:
print "HEADERS", request.headers
print "REQ_path", request.path
print "ARGS",request.args
print "DATA",request.data
print "FORM",request.form
這是一個有點粗糙,但有助於看看發生了什麼事情在每個請求。在調試時根據需要使用if語句打開和關閉它。
在cURL調用中運行沒有xml頭的請求會將數據發送到request.form字典。添加XML頭部定義會導致數據出現在request.data中。不知道你的服務器在哪裏出現故障,上面應該至少給你提示如何繼續。
編輯指以下評論:
我會用出色的xmltodict庫。這種捲曲呼叫
import xmltodict
@app.before_request
def before_request():
print xmltodict.parse(request.data)['xml']['From']
:使用此測試
curl -X POST -d '<xml><From>Jack</From><Body>Hello, it worked!</Body></xml>' localhost:5000 -H "Content-Type: text/xml"
'傑克' 打印出來沒有問題。
請注意,此調用已從您的問題中修改 - 添加了'xml'標記,因爲XML需要根節點(出於某種原因,它被稱爲xml 樹)。沒有這個標籤,你會從xmltodict(或你選擇的其他解析器)中得到一個解析錯誤。
好了,所以當我添加的內容類型和before_request叫我回去: REQ_path /測試 ARGS ImmutableMultiDict([]) 數據傑克 FORM ImmutableMultiDict([]) 於是我想我的現在的問題是,我如何從Flask內部獲得'name'(我已經嘗試了request.data和request.DATA.name等),並且隨後將如何通過XML中的ARGS(例如,如果我想要我的服務需要用戶名和密碼)Cheers @GC_Python –
JMzance
@JMzance,請參閱編輯原始答案。 –