我需要創建一個函式來發送帶有 post 請求的 xml 并在 python 中接收它。在官方網站上(僅在捷克語中可用)只有一小段 html 形式的代碼:
<form name="frmdata" method="post" enctype="multipart/form-data"
action="http://www.rzp.cz/cgi-bin/aps_cacheWEB.sh">
<input type="hidden" name="VSS_SERV" value="ZVWSBJXML">
<input type="file" name="filename">
<input type="submit" name="x" value="ODESLI">
</form>
所以我試圖將它像這樣轉換為 python,以實作自動化,但它不起作用:
headers = {'Content-Type':'text/xml'}
url = 'http://www.rzp.cz/cgi-bin/aps_cacheWEB.sh'
with open('dotaz1.txt') as xml:
myobj = { 'VSS_SERV': 'ZVWSBJXML',
'X': 'ODESLI',
'file': xml,
}
x = requests.post(url, data = myobj, headers=headers)
有人知道我做錯了什么嗎?
uj5u.com熱心網友回復:
我得到了以下代碼的有效回應:
import requests
url = 'http://www.rzp.cz/cgi-bin/aps_cacheWEB.sh'
if __name__ == '__main__':
with open('query.xml') as xml:
request_data = {
'VSS_SERV': 'ZVWSBJXML',
'filenameList': xml
}
response = requests.post(url, data=request_data)
print(f"status code: {response.status_code}")
print(f"response:\n{response.text}")
請注意:該引數filenameList與官方 API 檔案不同。但是,使用描述的值會filename導致來自服務器的此非常具體的回應:
在輸入中遇到檔案名的多個定義。如果您有意這樣做(例如使用 select),則變數必須具有“List”后綴。
我相應地更改了請求并獲得了有效的 XML 回應。進一步注意,我沒有設定顯式的 HTTP 處理程式,而是讓請求模塊選擇適當的標頭。似乎這很好用 - 只要您使用filenameList. 互聯網上有關于這個問題的提及。只需谷歌搜索參考的錯誤訊息,您就會發現幾個結果。看來,由艇員選拔正是正確的HTTP標頭也可以提供filename屬性。
我在這個 github 存盤庫中找到了一些幫助:https : //github.com/f4z4onZH27/rzp
我無法抗拒,只能參考自述檔案:
所以,我們在這里,解決政府和主要供應商的無能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393323.html
