async def connect_to_tracker(self): # create the HTTP GET message # Note: some trackers have strange URLs, e.g., # http://moviezone.ws/announce.php?passkey=8ae51c4b47d3e7d0774a720fa511cc2a # which has some sort of 'key' as parameter, so we need to use the add_url_params # utility function to handle such cases. url = add_url_params( "http://%s:%s%s" % (self.tracker_address[0], self.tracker_address[1], self.announce_page.replace('announce', 'scrape')), {"info_hash": self.infohash_list}) # no more requests can be appended to this session self.is_initiated = True self.last_contact = int(time.time()) try: self._logger.debug("%s HTTP SCRAPE message sent: %s", self, url) async with self._session: async with self._session.get( url.encode('ascii').decode('utf-8')) as response: body = await response.read() except UnicodeEncodeError as e: raise e except ClientResponseError as e: self._logger.warning("%s HTTP SCRAPE error response code %s", self, e.status) self.failed(msg=f"error code {e.status}") except Exception as e: self.failed(msg=str(e)) return self._process_scrape_response(body)
def test_add_url_param_clean(): url = 'http://stackoverflow.com/test' new_params = {'data': ['some', 'values']} result = add_url_params(url, new_params) assert "data=some" in result assert "data=values" in result
def test_add_url_param_some_present(): url = 'http://stackoverflow.com/test?answers=true' new_params = {'answers': False, 'data': ['some', 'values']} result = add_url_params(url, new_params) assert "data=values" in result assert "answers=false" in result