2013-04-02 1 views
1

나는 해쉬 브레이킹 콘테스트에 참가하고 있으며, 문자열을 HTML 형식으로 게시하고 해시 점수를 되찾기 위해 노력하고 있습니다. 지금까지 나는 URL에 게시 된 내용을 얻지 만 정확한 문자열은 아니므로 해시 값은 반환 된 값이 문자열을 수동으로 입력하는 것과는 다릅니다.파이썬 3.3에서 urllib을 사용하는 간단한 POST

import urllib.parse, urllib.request 

url = "http://almamater.xkcd.com/?edu=una.edu" 
data = "test".encode("ascii") 
header = {"Content-Type":"application/octet-stream"} 
req = urllib.request.Request(url, data, header) 
f = urllib.request.urlopen(req) 
print(f.read()) 
#parse f to pull out hash 

나는 사이트에서 다음 해시를 얻을 :

0fff9563bb3279289227ac77d319b6fff8d7e9f09da1247b72a0a265cd6d2a62645ad547ed8193db48cff847c06494a03f55666d3b47eb4c20456c9373c86297d630d5578ebd34cb40991578f9f52b18003efa35d3da6553ff35db91b81ab890bec1b189b7f52cb2a783ebb7d823d725b0b4a71f6824e88f68f982eefc6d19c6 

이것은 당신이 양식에 "테스트"(따옴표)를 입력하지 않는 경우 당신이 무엇을 얻을, 이는 예상과 상당히 다르다 :

e21091dbb0d61bc93db4d1f278a04fe1a51165fb7262c7da31f886ae09ff3e04c41483c500db2792c59742958d8f7f39fe4f4f2cdc7940b7b25e3289b89d344e06f76305b9de525933b5df5dae2a37388f82cf76374fe363587acfb49b9d2c8fc131ef4a32c762be083b07330989b298d60e312f56a6b8a4c0f53c9b59864fb7 

분명히 코드는 내가 기대하고있는 것을 수행하지 않습니다. 어떤 팁?

답변

1

폼 데이터를 제출할 때 필드 이름도 포함되므로 "테스트"를 제출할 때 실제로 제출 된 데이터는 "hashable = test"처럼 보입니다. 이 같은 데이터를 변경해보십시오 : 또는

data = "hashable=test".encode("ascii") 

또는 :

data = urllib.parse.urlencode({'hashable': 'test'}) 
+0

덕분에, 첫 번째는 완벽하게 작동합니다. – Vecht

관련 문제