10

我需要下载一个受密码保护的页面上的文件。要手动访问该页面,我首先必须通过普通登录页面进行身份验证。我想使用 curl 在脚本中获取此页面。
我的脚本首先登录。它似乎成功了——它从 PUT 返回 200 到 /login。但是,获取所需页面失败,返回 500。

我正在使用“饼干罐”:

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

在详细模式下,当我获取所需的文件时,我可以看到正在交换的 cookie。现在我的问题是:使用 COOKIEJAR 还有更多吗?

4

3 回答 3

15

我相信 Curl 会存储 cookie,但您需要明确使用它们。不过,我只为此使用过命令行界面。扫描文档我认为您可能想尝试:

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

(在第二次请求之前)

于 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 回答