簡體   English   中英

403通過Python SUDS檢索WSDL時

[英]403 when retrieving a WSDL via Python SUDS

我似乎無法讓SUDS下載需要基本身份驗證憑證的WSDL。 我的代碼很簡單:

wsdl_url = 'https://example.com/ChangeRequest.do?WSDL'
self.client = Client(wsdl_url, username=username, password=password)

我也嘗試過:

from suds.transport.https import HttpAuthenticated

wsdl_url = 'https://example.com/ChangeRequest.do?WSDL'
credentials = dict(username=username, password=password)
t = HttpAuthenticated(**credentials)
self.client = Client(url=wsdl_url, transport=t)

在這兩種情況下,服務均返回403禁止錯誤。 我可以進入http.py中的SUDS代碼,並將此行添加到調用中:

u2request.add_header('Authorization','Basic xxxxxxxxxxxxxxxxxxxx')

這可行。 在下載WSDL時讓SUDS通過我的憑據,我在做什么錯?

注意:我嘗試使用Chrome的Postman插件和SoapUI直接連接到WSDL,並且該服務也能正常工作。 因此,我知道憑據是正確的。

我以前曾經遇到過這個問題,並與soap UI標頭進行比較。 發現該肥皂泡缺少標題(主機)。

client.set_options(headers={'Host': 'value'})

並解決問題。

我遇到了類似的問題(suds v0.4,wsdl,403),發現這是因為我要訪問的服務器阻塞了標頭為User-Agent任何請求,如Python-urllib* (suds正在使用urllib2,因此是默認標頭)。 顯式更改標題可以解決此問題。

特定於我的解決方案:我覆蓋了傳輸類的open方法,並設置了客戶端選項,如以下代碼片段所示。 請注意,我們需要分別為打開的請求和后續請求分別設置顯式設置。 如果知道的話,請提出更好的方法來規避這一點。 希望這篇文章可以幫助您節省以后的時間。

import urllib2
import suds
from suds.transport.https import HttpAuthenticated
from suds.transport import TransportError

URL = 'https://example.com/ChangeRequest.do?WSDL'

class HttpHeaderModify(HttpAuthenticated):
    def open(self, request):
        try:
            url = request.url
            u2request = urllib2.Request(url, headers={'User-Agent': 'Mozilla'})
            self.proxy = self.options.proxy
            return self.u2open(u2request)
        except urllib2.HTTPError, e:
            raise TransportError(str(e), e.code, e.fp)

transport = HttpHeaderModify()
client = Client(URL, transport=transport, timeout=10)

# Subsequent requests' header needs to be set again here. The overridden transport
# class only handles opening of the client.
client.set_options(headers={'User-Agent': 'Mozilla'})

PS雖然我的問題可能不盡相同,但搜索“ 403肥皂水”會彈出此SO問題,因此我決定將解決方案發布在這里。

給我正確方向的參考文章: https : //bitbucket.org/jurko/suds/issues/27/client-request-for-wsdl-does-not-use-given

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM