128

Python の Requests モジュールを使用して Web サイトにログインするためのリクエストを投稿しようとしていますが、実際には機能していません。私はこれに慣れていないので、ユーザー名とパスワードのクッキーを作成する必要があるのか​​ 、それとも私が見つけたある種のHTTP認証のもの(??)を作成する必要があるのか​​ わかりません。

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

だから今、私は「投稿」とクッキーを使用することになっていると思います....

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

私はクッキーのことを間違っていると感じています...わかりません。

正しくログインできない場合、ホームページのタイトルは「Locationary.com」に出てくるはずであり、そうである場合は「ホームページ」になるはずです。

リクエストと Cookie についていくつか説明していただけると助かります。:D

ありがとう。

...それはまだ本当にうまくいきませんでした。わかりました...これは、ログインする前のホームページ HTML の内容です。

</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif">    </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName"  size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input  class="Data_Entry_Field_Login"  type="password" name="inUserPass"     id="inUserPass"></td>

だから私はそれを正しくやっていると思いますが、出力はまだ「Locationary.com」です

2回目の編集:

長時間ログインしたままにしたいのですが、そのドメインでページをリクエストするたびに、ログインしているかのようにコンテンツが表示されるようにしたいと考えています.

4

6 に答える 6

286

別の解決策を見つけたことは知っていますが、この質問を見つけて同じものを探している私のような人にとっては、次のようなリクエストで実現できます。

まず、Marcus が行ったように、ログイン フォームのソースをチェックして、フォームの投稿先の URL、およびユーザー名とパスワード フィールドの name 属性の 3 つの情報を取得します。彼の例では、inUserName と inUserPass です。

それを取得したら、requests.Session()インスタンスを使用して、ログインの詳細をペイロードとしてログイン URL にポスト リクエストを行うことができます。セッション インスタンスからリクエストを行うことは、通常リクエストを使用することと本質的に同じです。永続性を追加するだけで、Cookie などを保存して使用できるようになります。

ログイン試行が成功したと仮定すると、セッション インスタンスを使用してサイトにさらにリクエストを送信できます。あなたを識別する Cookie は、リクエストを承認するために使用されます。

import requests

# Fill in your details here to be posted to the login form.
payload = {
    'inUserName': 'username',
    'inUserPass': 'password'
}

# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
    p = s.post('LOGIN_URL', data=payload)
    # print the html returned or something more intelligent to see if it's a successful login page.
    print p.text

    # An authorised request.
    r = s.get('A protected web page url')
    print r.text
        # etc...
于 2013-07-13T18:32:18.403 に答える
57

ログイン直後に表示されるページに必要な情報があれば…

python-requestsドキュメントのように、代わりにck変数を呼び出しましょう:payload

payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)

さもないと...

以下のhttps://stackoverflow.com/a/17633072/111362を参照してください。

于 2012-08-09T22:21:48.950 に答える
46

簡単にするために、サイトの URL がhttp://example.com/で、ユーザー名とパスワードを入力してサインアップする必要があると仮定して、http://example というログイン ページに移動します。 com/login.phpに移動してソース コードを表示し、アクション URL を検索します。これは次のようなフォーム タグになります。

 <form name="loginform" method="post" action="userinfo.php">

次に、userinfo.php を使用して「 http://example.com/userinfo.php 」となる絶対 URL を作成し、単純な python スクリプトを実行します。

import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
          'password': 'pass'}

r = requests.post(url, data=values)
print r.content

これがいつかどこかで誰かを助けることを願っています。

于 2015-02-20T12:07:52.087 に答える