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)
Exemple #2
0
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
Exemple #3
0
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