@@ -27,7 +27,7 @@ class OneLogin_Saml2_IdPMetadataParser(object):
2727 """
2828
2929 @classmethod
30- def get_metadata (cls , url , validate_cert = True , timeout = None ):
30+ def get_metadata (cls , url , validate_cert = True , timeout = None , headers = None ):
3131 """
3232 Gets the metadata XML from the provided URL
3333 :param url: Url where the XML of the Identity Provider Metadata is published.
@@ -38,19 +38,23 @@ def get_metadata(cls, url, validate_cert=True, timeout=None):
3838
3939 :param timeout: Timeout in seconds to wait for metadata response
4040 :type timeout: int
41+ :param headers: Extra headers to send in the request
42+ :type headers: dict
4143
4244 :returns: metadata XML
4345 :rtype: string
4446 """
4547 valid = False
4648
49+ request = urllib2 .Request (url , headers = headers or {})
50+
4751 if validate_cert :
48- response = urllib2 .urlopen (url , timeout = timeout )
52+ response = urllib2 .urlopen (request , timeout = timeout )
4953 else :
5054 ctx = ssl .create_default_context ()
5155 ctx .check_hostname = False
5256 ctx .verify_mode = ssl .CERT_NONE
53- response = urllib2 .urlopen (url , context = ctx , timeout = timeout )
57+ response = urllib2 .urlopen (request , context = ctx , timeout = timeout )
5458 xml = response .read ()
5559
5660 if xml :
@@ -87,7 +91,7 @@ def parse_remote(cls, url, validate_cert=True, entity_id=None, timeout=None, **k
8791 :returns: settings dict with extracted data
8892 :rtype: dict
8993 """
90- idp_metadata = cls .get_metadata (url , validate_cert , timeout )
94+ idp_metadata = cls .get_metadata (url , validate_cert , timeout , headers = kwargs . pop ( 'headers' , None ) )
9195 return cls .parse (idp_metadata , entity_id = entity_id , ** kwargs )
9296
9397 @classmethod
0 commit comments