1

Web サーバー経由でファイルのダウンロードを自動化しようとしています。wget または curl または python urllib / urllib2 を使用する予定です。

ほとんどのソリューションは、wget と urllib と urllib2 を使用します。それらはすべて、HHTP ベースの認証と Cookie ベースの認証について語っています。私の問題は、自分のデータを保存する Web サイトで使用されているものがわからないことです。サイトとのやり取りは次のとおりです。

  1. 通常、サイトhttp://www.anysite.com/index.cgiにログインしますか?
  2. ログインとパスワードを含むフォームを取得します。両方を入力してリターンを押します。
  3. URL はhttp://www.anysite.com/index.cgiのままですか? 相互作用全体の間。しかし今、私はフォルダとファイルのリストを持っています
  4. フォルダーまたはファイルをクリックすると、URL がhttp://shamrockstructures.com/cgi-bin/index.cgi?page=download&file=%2Fhome%2Fjanysite%2Fpublic_html%2Fuser_data%2Fuserareas%2Ffile.tar.bz2に変わります

そして、ブラウザはファイルを保存する機会を提供してくれます

サイトが HTTP または Cookie ベースの認証を使用しているかどうかを確認する方法を知りたいです。その後、pythonでcookielibまたはurllib2を使用して接続し、ファイルとフォルダーのリストを取得し、接続を維持しながらすべてを再帰的にダウンロードできると想定しています。

pS: wget および wget --http-user "uname" --http-password "passwd" http://www.anysite.com/index.cgiを介して接続するクッキー カッターの方法を試しましたか? 、しかし彼らは私にウェブフォームを返すだけです。

4

3 に答える 3

2

Web ページを使用してログインする場合、そのサイトは Cookie ベースの認証を使用している可能性があります。(技術的には、資格情報を URI に埋め込むことで、HTTP 基本認証を使用できますが、ほとんどの場合、これを行うのは愚かなことです。) ユーザー名とパスワードのフィールドを含む別の小さなダイアログ (このようなもの) が表示された場合)、HTTP 基本認証を使用しています。

HTTP 基本認証を使用してログインしようとしてログイン ページが返された場合、これはサイトが HTTP 基本認証を使用していないことを示しています。

最近では、ほとんどのサイトで Cookie ベースの認証が使用されています。urllib2 などの HTTP サイレントでこれを行うには、ログイン フォームのフィールドの HTTP POST を実行する必要があります。(サイトにはログインに必要な Cookie が含まれている可能性があるため、実際には最初にログイン フォームを要求する必要がある場合がありますが、通常はこれは必要ありません)。 . このリクエストから返された Cookie を保存します。次のリクエストを行うときは、これらの Cookie を含めてください。リクエストごとに Cookie で応答する場合があるため、それらを保存して、次のリクエストで再度送信する必要があります。

urllib2 には「Cookie jar」と呼ばれる機能があり、ユーザーがリクエストを送信したり Web ページを受信したりするときに、Cookie を自動的に処理します。それがあなたが望むものです。

于 2010-10-15T18:00:13.947 に答える
1

次のように pycurl を使用できます。

import pycurl

COOKIE_JAR = 'cookiejar' # file to store the cookies
LOGIN_URL = 'http://www.yoursite.com/login.cgi'
USER_FIELD = 'user' # Name of the element in the HTML form
USER = 'joe'
PASSWD_FIELD = 'passwd' # Name of the element in the HTML form
PASSWD = 'MySecretPassword'

def read(html):
    """Read the body of the response, with posible                                                                                                                               
    future html parsing and re-requesting"""
    print html

com = pycurl.Curl()
com.setopt(pycurl.WRITEFUNCTION, read)
com.setopt(pycurl.COOKIEJAR, COOKIE_JAR)
com.setopt(pycurl.FOLLOWLOCATION, 1) # follow redirects
com.setopt(pycurl.POST, 1)
com.setopt(pycurl.POSTFIELDS, '%s=%s;%s=%s'%(USER_FIELD, USER,
                                             PASSWD_FIELD, PASSWD))
com.setopt(pycurl.URL, LOGIN_URL )
com.perform()

単純な pycurl は非常に「プリミティブ」な場合がありますが (制限された setopt アプローチを使用)、ジョブを完了し、cookie jar オプションを使用して Cookie を適切に処理します。

于 2010-10-16T09:28:37.027 に答える
0

AFAIK Cookie ベースの認証は、少なくとも 1 回ログインに成功した場合にのみ使用されます。HTTP ベースの認証である必要があるファイルをダウンロードできる場合は、ブラウザーの設定を変更して、そのドメインからの Cookie の保存を無効にすることができます。

ログインのために現在発生している可能性がある (おそらく POST) ログイン要求に対して、同等の GET 要求を実行してみてください。firebug または fiddler を使用して、送信されたログイン要求を確認します。また、ユーザーエージェント文字列またはその他のパラメーターに基づいて、別の出力を返す JavaScript コードがあるかどうかにも注意してください。

httplibmechanizeが役立つかどうかを確認してください。

于 2010-10-15T18:26:08.600 に答える