Простой POST с использованием urllib с Python 3.3

Я участвую в конкурсе по взлому хешей и пытаюсь автоматизировать отправку строк в html-форму и вернуть счет хеша. До сих пор мне удавалось отправить сообщение SOMETHING на URL, но это не та строка, которую я ожидаю, и, таким образом, значение, возвращаемое для хэша, далеко от того, которое было получено простым вводом строки вручную.

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

Это значительно отличается от того, что я ожидал, что вы получите, если введете "test" (без кавычек) в форму:

e21091dbb0d61bc93db4d1f278a04fe1a51165fb7262c7da31f886ae09ff3e04c41483c500db2792c59742958d8f7f39fe4f4f2cdc7940b7b25e3289b89d344e06f76305b9de525933b5df5dae2a37388f82cf76374fe363587acfb49b9d2c8fc131ef4a32c762be083b07330989b298d60e312f56a6b8a4c0f53c9b59864fb7

Очевидно, что код не делает то, что я ожидаю. Какие-нибудь советы?

1 ответ

Решение

Когда вы отправляете данные формы, они также включают имя поля, поэтому, когда вы отправляете "test", отправленные данные на самом деле выглядят как "hashable=test". Попробуйте изменить ваши данные следующим образом:

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

или альтернативно:

data = urllib.parse.urlencode({'hashable': 'test'})
Другие вопросы по тегам