我正在尝试修复一个可以登录我的MU帐户并检索一些数据的程序....
我不知道我做错了什么......那就是代码:
#!/usr/bin/env python
import urllib, urllib2, cookielib
username = 'username'
password = 'password'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'password' : password})
opener.open('http://megaupload.com/index.php?c=login', login_data)
resp = opener.open('http://www.megaupload.com/index.php?c=filemanager')
print resp.read()
任何答案的答案!
答案 0 :(得分:2)
您可以模拟表单的填充。
为此你可以在perl模块WWW :: Mechanize上使用mechanize lib。
#!/usr/bin/env python
import urllib, urllib2, cookielib, mechanize
username = 'username'
password = 'password'
br = mechanize.Browser()
cj = cookielib.CookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6')]
br.open('http://www.megaupload.com/?c=login')
br.select_form('loginfrm')
br.form['username'] = username
br.form['password'] = password
br.submit()
resp = br.open('http://www.megaupload.com/index.php?c=filemanager')
print resp.read()
答案 1 :(得分:2)
好吧,我自己实现了它,似乎你只是忘记了一个值 - 这就是为什么我总是使用TamperData或类似的东西来检查我的浏览器发送到服务器的内容 - 比通过HTML更容易和更短。< / p>
无论如何只需将'redir':1添加到你的词典中它就可以了:
import http.cookiejar
import urllib
if __name__ == '__main__':
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
login_data = urllib.parse.urlencode({'username' : username, 'password' : password, 'login' : 1, 'redir' : 1})
response = opener.open("http://www.megaupload.com/?c=login", login_data)
with open("test.txt", "w") as file:
file.write(response.read().decode("UTF-8")) #so we can compare resulting html easily
虽然我必须说我现在要看看机械化和合作 - 我经常做这样的事情,这可能是非常值得的。虽然我不能强调,最重要的帮助仍然是一个浏览器插件,可以让你检查发送的数据;)
答案 2 :(得分:1)
mechanize或twill可能会让您更加幸运,这些运动旨在简化这些流程。否则,我认为你的开场白至少缺少一个重要的组成部分:处理cookie的东西。这是我上次这样做时的一些代码:
# build opener with HTTPCookieProcessor
cookie_jar = cookielib.MozillaCookieJar('tasks.cookies')
o = urllib2.build_opener(
urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(cookie_jar)
)
答案 3 :(得分:0)
我的猜测是将c=login
名称/值对添加到login_data,而不是将其直接包含在URL上。
你可能也打破了TOS / EULA,但我不能说我在乎这么多。