Ticket #316: referer-316.patch

File referer-316.patch, 2.9 KB (added by thijs, 5 months ago)

Patch against r1464

  • pyamf/remoting/client/__init__.py

     
    175175    @ivar amf_version: The AMF version to use. 
    176176        See L{ENCODING_TYPES<pyamf.ENCODING_TYPES>}. 
    177177    @type amf_version: C{int} 
     178    @ivar referer: The referer, or HTTP referer, identifies the address of the 
     179        client. Ignored by default. 
     180    @type referer: C{str} 
    178181    @ivar client_type: The client type. See L{ClientTypes<pyamf.ClientTypes>}. 
    179182    @ivar connection: The underlying connection to the remoting server. 
    180183    @type connection: C{httplib.HTTPConnection} or C{httplib.HTTPSConnection} 
     
    182185    @type headers: L{HeaderCollection<pyamf.remoting.HeaderCollection>} 
    183186    """ 
    184187 
    185     def __init__(self, url, amf_version=pyamf.AMF0, client_type=DEFAULT_CLIENT_TYPE): 
     188    def __init__(self, url, amf_version=pyamf.AMF0, client_type=DEFAULT_CLIENT_TYPE, 
     189                 referer=None): 
    186190        self.logger = logging.instance_logger(self) 
    187191        self.original_url = url 
    188192        self.requests = [] 
    189193        self.request_number = 1 
    190194 
     195        self.referer = referer 
    191196        self.amf_version = amf_version 
    192197        self.client_type = client_type 
    193198        self.headers = remoting.HeaderCollection() 
     
    232237            raise ValueError, 'Unknown scheme' 
    233238 
    234239        self.logger.info('Creating connection to %s://%s:%s' % (self.url[0], hostname, port)) 
    235  
     240        self.logger.debug('Referer: %s' % self.referer) 
     241         
    236242    def addHeader(self, name, value, must_understand=False): 
    237243        """ 
    238244        Sets a persistent header to send with each request. 
     
    334340        """ 
    335341        self.logger.debug('Executing single request: %s' % request) 
    336342        body = remoting.encode(self.getAMFRequest([request])) 
     343        headers = {'Content-Type': remoting.CONTENT_TYPE} 
    337344 
     345        if self.referer is not None: 
     346            headers['Referer'] = self.referer 
     347 
    338348        self.logger.debug('Sending POST request to %s' % self._root_url) 
    339349        self.connection.request('POST', self._root_url, body.getvalue(), 
    340             {'Content-Type': remoting.CONTENT_TYPE}) 
     350                                headers) 
    341351 
    342352        envelope = self._getResponse() 
    343353        self.removeRequest(request) 
     
    350360        C{self.requests}. 
    351361        """ 
    352362        body = remoting.encode(self.getAMFRequest(self.requests)) 
     363        headers = {'Content-Type': remoting.CONTENT_TYPE} 
    353364 
     365        if self.referer is not None: 
     366            headers['Referer'] = self.referer 
     367 
    354368        self.logger.debug('Sending POST request to %s' % self._root_url) 
    355369        self.connection.request('POST', self._root_url, body.getvalue(), 
    356             {'Content-Type': remoting.CONTENT_TYPE}) 
     370                                headers) 
    357371 
    358372        envelope = self._getResponse() 
    359373