2012-11-28 3 views
2

토런트 추적기에 연결하여 비트 토런트를 재생할 피어 목록을 받으려고하지만 적절한 GET 요청을 생성하는 데 문제가 있습니다.토런트 추적기 정보 해시 GET 요청 - 파이썬

필자가 이해하는 한, 토렌트 파일에서 bencoded 'info'섹션의 20 바이트 SHA1 해시를 얻어야합니다. 다음 코드를 사용합니다 :

h = hashlib.new('sha1') 
h.update(bencode.bencode(meta_dict['info'])) 
info_hash = h.digest() 

여기는 내가 갇혀 있습니다. 적절한 URL 인코딩 된 정보 _hash를 만들어 URL 문자열을 매개 변수로 사용하는 방법을 알아낼 수 없습니다.

나는 그것이 urllib.urlencode와 urllib.quote의 조합을 포함한다고 생각하지만, 지금까지 시도한 것이 없습니다.

+0

urllib.quote을 (해야 할) 당신이 필요로하는 모든해야 ... 드물게 –

+1

는 급류 누구의 키 사전 식 정렬되지 않습니다 정보 DICT이 있거나 중복 키를 포함 . 이 경우, 다시 인코딩하면 .torrent 파일의 바이트 시퀀스와 다른 바이트 시퀀스가 ​​생성되고 잘못된 해시가 생성됩니다. 이를 처리하기 위해 .torrent 파일에서 원래 범위를 해시 대신 info dict에 해싱합니다. – Arvid

답변

0

나는 urllib.quote_plus()이 전부라고 생각합니다.

1

조금 늦었지만 누군가를 도울 수 있습니다.

모듈을 사용하여 requests은 자체로 URL을 인코딩합니다. 먼저 매개 변수 (info_hash, peer_id 등)로 사전을 만들어야합니다. 그럼 당신은 GET 요청을

response = requests.get(tracker_url, params=params)