2010-02-12 7 views
0

J'écris un petit tracker Bittorrent sur le framework Django, dans le cadre d'un projet plus vaste. Cependant, j'ai des problèmes avec le décodage du paramètre "info_hash" de la demande d'annonce. Fondamentalement, uTorrent prend le hachage SHA1 du torrent en question et l'URL encode sa représentation hexadécimale, qui est ensuite envoyée au tracker dans une requête GET en tant que paramètre info_hash.Django ne traduit pas correctement la chaîne de requête Bittorrent

Le info_hash

A44B44B0EE8D85A9F7135489D522A19DA2C87C91 

est encodée comme:

%a4KD%b0%ee%8d%85%a9%f7%13T%89%d5%22%a1%9d%a2%c8%7c%91 

Cependant, Django décode ce à la chaîne Unicode:

u'\ufffdKD\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\x13T\ufffd\ufffd"\ufffd\ufffd\ufffd\ufffd|\ufffd' 

au lieu d'une chaîne littérale comme ceci:

\xa4KD\xb0\xee\x8d\x85\xa9\xf7\x13T\x89\xd5"\xa1\x9d\xa2\xc8|\x91 

Comment est-ce que je peux empêcher Django d'essayer de traduire l'info_hash en Unicode, ainsi je peux le rappeler? Mon but est d'obtenir une chaîne littérale que je peux ensuite encoder en une chaîne hexadécimale.

Des pensées? Toutes mes excuses s'il y a un concept d'encodage qui me manque. Merci!

Répondre

0

Django décode toutes les données GET en utilisant le codage par défaut. Vous aurez besoin de la chaîne de requête vous-même, éventuellement de os.environ['QUERY_STRING'] ou de request.environ['QUERY_STRING'].

+0

Merci, je ne sais pas s'il y avait un plus manière élégante de le faire. – Alex

1

Quels sont vos paramètres.DEFAULT_ENCODING? Aussi, comment diable le hachage ressemble-t-il dans les en-têtes HTTP? Il ne devrait pas être modifié du tout lors de l'encodage comme ci-dessous:

>>> import urllib 
>>> urllib.urlencode({'hash':"A44B44B0EE8D85A9F7135489D522A19DA2C87C91"}) 
'hash=A44B44B0EE8D85A9F7135489D522A19DA2C87C91' 

depuis:

>>> urllib.quote('A44B44B0EE8D85A9F7135489D522A19DA2C87C91') == 'A44B44B0EE8D85A9F7135489D522A19DA2C87C91' 
True 

Et donc:

>>> urllib.unquote('%a4KD%b0%ee%8d%85%a9%f7%13T%89%d5%22%a1%9d%a2%c8%7c%91') == 'A44B44B0EE8D85A9F7135489D522A19DA2C87C91' 
False 
+0

Bonne réponse, bons moments! – jathanism

+0

Ce hachage particulier est codé par uTorrent comme étant: "% a4KD% b0% ee% 8d% 85% a9% f7% 13T% 89% d5% 22% a1% 9d% a2% c8% 7c% 91" Je ne comprends pas pourquoi c'est codé comme ça, mais la seule façon de le décoder (que j'ai trouvé) est manuellement via la chaîne de requête. – Alex

Questions connexes