97

How can I do it? I was trying to enter some specified link (with urllib), but to do it, I need to log in.

I have this source from the site:

<form id="login-form" action="auth/login" method="post">
    <div>
    <!--label for="rememberme">Remember me</label><input type="checkbox" class="remember" checked="checked" name="remember me" /-->
    <label for="email" id="email-label" class="no-js">Email</label>
    <input id="email-email" type="text" name="handle" value="" autocomplete="off" />
    <label for="combination" id="combo-label" class="no-js">Combination</label>
    <input id="password-clear" type="text" value="Combination" autocomplete="off" />
    <input id="password-password" type="password" name="password" value="" autocomplete="off" />
    <input id="sumbitLogin" class="signin" type="submit" value="Sign In" />

Is this possible?

4

7 に答える 7

76
于 2010-05-26T05:38:59.470 に答える
30

通常、サイトにログインするには Cookie が必要です。これは、cookielib、urllib、および urllib2 を意味します。以下は、私が Facebook の Web ゲームをプレイしていたときに書き戻したクラスです。

import cookielib
import urllib
import urllib2

# set these to whatever your fb account is
fb_username = "your@facebook.login"
fb_password = "secretpassword"

class WebGamePlayer(object):

    def __init__(self, login, password):
        """ Start up... """
        self.login = login
        self.password = password

        self.cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener(
            urllib2.HTTPRedirectHandler(),
            urllib2.HTTPHandler(debuglevel=0),
            urllib2.HTTPSHandler(debuglevel=0),
            urllib2.HTTPCookieProcessor(self.cj)
        )
        self.opener.addheaders = [
            ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; '
                           'Windows NT 5.2; .NET CLR 1.1.4322)'))
        ]

        # need this twice - once to set cookies, once to log in...
        self.loginToFacebook()
        self.loginToFacebook()

    def loginToFacebook(self):
        """
        Handle login. This should populate our cookie jar.
        """
        login_data = urllib.urlencode({
            'email' : self.login,
            'pass' : self.password,
        })
        response = self.opener.open("https://login.facebook.com/login.php", login_data)
        return ''.join(response.readlines())

HTTPS または Redirect ハンドラーは必ずしも必要ではありませんが、問題はなく、オープナーがより堅牢になります。また、Cookie が必要ない場合もありますが、投稿したフォームだけではわかりにくいです。コメントアウトされた「Remember me」入力から、あなたはそうかもしれません。

于 2010-05-26T06:19:05.533 に答える
19
import cookielib
import urllib
import urllib2

url = 'http://www.someserver.com/auth/login'
values = {'email-email' : 'john@example.com',
          'password-clear' : 'Combination',
          'password-password' : 'mypassword' }

data = urllib.urlencode(values)
cookies = cookielib.CookieJar()

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(),
    urllib2.HTTPHandler(debuglevel=0),
    urllib2.HTTPSHandler(debuglevel=0),
    urllib2.HTTPCookieProcessor(cookies))

response = opener.open(url, data)
the_page = response.read()
http_headers = response.info()
# The login cookies should be contained in the cookies variable

詳細については、https ://docs.python.org/2/library/urllib2.html をご覧ください。

于 2010-05-26T06:18:24.723 に答える
8

一般に、ウェブサイトはさまざまな方法で承認を確認できますが、あなたが対象としているものでは、かなり簡単に確認できるようです。

必要なのは、そこに表示されるさまざまなフィールドを含むフォーム エンコードされた blobPOSTauth/loginURL に送信することだけです (ラベルは忘れてくださいfor。それらは人間の訪問者のための装飾です)。 handle=whatever&password-clear=pwdなどなど、ハンドル (別名メール) とパスワードの値を知っている限り、問題ありません。

おそらく、その POST は、セッションを検証するヘッダーを含む「正常にログインしました」ページにリダイレクトしますSet-Cookie(必ずその Cookie を保存し、セッションに沿ったさらなる対話でそれを送り返します!)。

于 2010-05-26T05:27:43.297 に答える
5

HTTP の場合、現在の選択肢は次のとおりです: Requests- HTTP for Humans

于 2013-12-15T02:53:09.873 に答える