10

パスワードで保護されたページにあるファイルをダウンロードする必要があります。このページに手動でアクセスするには、まず通常のログイン ページで認証する必要があります。curl を使用して、このページをスクリプトで取得したいと考えています。
私のスクリプトは最初にログインします。成功したように見えます。PUT から /login に 200 が返されます。ただし、目的のページのフェッチは 500 で失敗します。

「クッキージャー」を使用しています:

C.setopt(pycurl.COOKIEJAR, 'cookie.txt')

詳細モードでは、必要なファイルをフェッチするときに Cookie が交換されていることがわかります。ここで私の質問: COOKIEJAR を使用すること以外に何かありますか?

4

3 に答える 3

15

Curl は Cookie を保存すると思いますが、明示的に使用する必要があります。ただし、これにはコマンドラインインターフェイスしか使用したことがありません。ドキュメントをスキャンすると、次のことを試してみたいと思うかもしれません。

C.setopt(pycurl.COOKIEFILE, 'cookie.txt')

(2 番目の要求の前)

于 2010-02-25T15:21:43.283 に答える
9

最初に Cookie を保存してから、そこから読み取る必要があります。

C.setopt(pycurl.COOKIEJAR, 'cookie.txt')
C.setopt(pycurl.COOKIEFILE, 'cookie.txt')

ここで curl --help が返したもの:

-b, --cookie STRING/FILE  String or file to read cookies from (H)
-c, --cookie-jar FILE  Write cookies to this file after operation (H)

このサンプルを参照してください。

def connect(self):
    '''
    Connect to NGNMS server
    '''
    host_url = self.ngnms_host + '/login'

    c = pycurl.Curl()
    c.setopt(c.URL, host_url)
    c.setopt(pycurl.TIMEOUT, 10)

    c.setopt(pycurl.FOLLOWLOCATION, 1)
    c.setopt(pycurl.POSTFIELDS, 'j_username={ngnms_user}&j_password={ngnms_password}'.format(**self.ngnms_login))
    c.setopt(pycurl.COOKIEJAR, 'data/ngnms.cookie')

    # c.setopt(c.VERBOSE, True)

    c.setopt(pycurl.SSL_VERIFYPEER, 0);
    session = c
    return session
于 2013-10-31T06:12:39.400 に答える
2

wdsは正しいです。

さらに理解を深めるために、利用可能なオプションはhttp://curl.haxx.se/libcurl/c/curl_easy_setopt.htmlにあるオプションに基づいています (Cookie ショートカットのセクションを参照してください)。

500 は内部サーバー エラーです...ここで何が起こっているかについての詳細を知らずに、これがスクリプトに責任があるかどうかを確認するのは困難です。ページが期待している (Cookie とは関係のない) 他のデータを渡すのに失敗している可能性があります (そして、適切なエラー処理が実装されていません!)。

JB

于 2011-01-12T17:11:18.273 に答える