0

我一直在尝试找到一个 python 代码,它可以从"Google App Engine"登录到我在 yahoo.com 上的邮箱 。 在这里(单击此处查看该页面)我得到了以下代码:

import urllib, urllib2, cookielib

url = "https://login.yahoo.com/config/login?"
form_data = {'login' : 'my-login-here', 'passwd' : 'my-password-here'}

jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
form_data = urllib.urlencode(form_data)
# data returned from this pages contains redirection
resp = opener.open(url, form_data)
# yahoo redirects to http://my.yahoo.com, so lets go there instead
resp = opener.open('http://mail.yahoo.com')
print resp.read()

该脚本的作者查看了yahoo 登录表单的 HTML 脚本 并想出了这个脚本。

该登录表单包含两个字段,一个用于用户的 Yahoo! ID,另一个是用户密码。以下是这两个字段的该页面的 HTML 代码的样子:

用户 ID 字段:

<input type="text" maxlength="96" class="yreg_ipt" size="17" value="" id="username" name="login">

密码字段:

<input type="password" maxlength="64" class="yreg_ipt" size="17" value="" id="passwd" name="passwd">

但是,当我将此代码上传到 Google App Engine 时,我发现此登录表单不断返回给我,我认为这意味着登录过程没有成功。为什么会这样?

4

1 回答 1

3

您发送 MD5 哈希而不是普通密码。此外,您还必须使用他们正在实施的各种 CSRF 保护等。看:

            <input type="hidden" name=".tries" value="1"> 
            <input type="hidden" name=".src" value="ym"> 
            <input type="hidden" name=".md5" value=""> 
            <input type="hidden" name=".hash" value=""> 
            <input type="hidden" name=".js" value=""> 
            <input type="hidden" name=".last" value=""> 
            <input type="hidden" name="promo" value=""> 
            <input type="hidden" name=".intl" value="us"> 
            <input type="hidden" name=".bypass" value=""> 
            <input type="hidden" name=".partner" value=""> 
            <input type="hidden" name=".u" value="bd5tdpd5rf2pg"> 
            <input type="hidden" name=".v" value="0"> 
            <input type="hidden" name=".challenge" value="5qUiIPGVFzRZ2BHhvtdGXoehfiOj"> 
            <input type="hidden" name=".yplus" value=""> 
            <input type="hidden" name=".emailCode" value=""> 
            <input type="hidden" name="pkg" value=""> 
            <input type="hidden" name="stepid" value=""> 
            <input type="hidden" name=".ev" value=""> 
            <input type="hidden" name="hasMsgr" value="0"> 
            <input type="hidden" name=".chkP" value="Y"> 
            <input type="hidden" name=".done" value="http://mail.yahoo.com"> 
            <input type="hidden" name=".pd" value="ym_ver=0&c=&ivt=&sg="> 

启动 Wireshark 并使用它。祝你好运 :)

但是,如果您打算将它与 App Engine 一起使用,请记住,使用 Google IP 几乎肯定会导致带有验证码的挑战。此外,雅虎可能会阻止您User-Agent由 Google 永久设置的内容。

于 2010-04-03T18:43:34.207 回答