1

ユーザー名とパスワードを使用して Web サイトにログインし、特定のページからいくつかのデータを取得する、twisted を使用して単純な Web クライアントを作成したいと考えています。これを行う最善の方法は何ですか?

編集: さらに詳細を追加するには: これは、単純なユーザー名/パスワードの HTML フォーム送信です。関連する PHPSESSID Cookie があり、これは PHP サイトです。キャプチャはありません。HTTP 認証なし。

4

1 に答える 1

2

HTML フォーム認証は、認証フォームを送信することによって行われます。これは、フォームのアクションとメソッドの両方を知っていることを意味します。手始めに、ページのソースを手動で読んで、この情報を見つけることができます。より一般的な解決策は、ページを解析し (おそらく lxml や html5lib などを使用)、この情報を自動的に抽出することです。

また、フォームのユーザー名とパスワード フィールドの名前、およびその他の必須フォーム フィールドの名前と正しい値も知っておく必要があります。

たとえば、次のようなフォームです。

<form action="https://example.com/auth" method="post">
    <input type="text" name="Email" id="Email" value="">
    <input type="password" name="Password" id="Password" value="">
</form>

のフォーム アクションhttps://example.com/authと のメソッドがありpostます。POSTそのため、 にリクエストを発行する必要がありますhttps://example.com/auth

慣例により、このようなリクエストのデータのエンコーディングではapplication/x-www-form-urlencoded、コンテンツ タイプとして が使用されます。

Python stdlib を使用して、このようなリクエストの本文をエンコードできますurllib.urlencode

最後に、認証の成功が​​今後のリクエストで再提示する必要がある Cookie として表される場合は、Cookie の値を取得して再送信する必要があります。

したがって、これをすべてまとめると:

from twisted.web.client import getPage

cookies = {}
d = getPage(
    "https://example.com/auth",
    method="POST",
    headers={"content-type": "application/x-www-form-urlencoded"},
    postdata=urllib.urlencode(dict(Email="alice@example.com", Password="secret")),
    cookies=cookies)

ディクショナリにはcookie、サーバーによって設定された Cookie の値が入力されます。getPageこの認証の結果を使用したい将来の呼び出しと一緒に渡します。

そうは言っても、scrapy を使用することをお勧めします。この低レベルの作業の多くを実行し、問題のより興味深い部分に集中できるようにします。

于 2012-11-14T13:31:09.877 に答える