首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定网站是在使用cookie还是基于http的身份验证

如何确定网站是在使用cookie还是基于http的身份验证
EN

Stack Overflow用户
提问于 2010-10-15 17:35:03
回答 3查看 5.7K关注 0票数 1

我正在尝试通过一个via服务器自动下载文件。我计划使用wget或curl或python / urllib2。

大多数解决方案使用wget、urllib和urllib2。他们都谈到了基于HHTP的认证和基于cookie的身份验证。我的问题是,我不知道哪一个是用于存储我的数据的网站。以下是与网站的互动:

  1. 通常我登录到http://www.anysite.com/index.cgi站点
  2. 我得到了一个带有登录和密码的表单。我输入两种,然后按回车。
  3. 网址以http://www.anysite.com/index.cgi的形式存在?在整个互动过程中。但是现在我有了一个文件夹和文件的列表
  4. 如果我单击一个文件夹或文件,对data%2Fuserareas%2Ffile.tar.bz2的URL更改

浏览器为我提供了保存文件的机会

我想知道如何确定站点是使用HTTP还是基于cookie的身份验证。在此之后,我假设我可以使用python中的urllib2或urllib2连接到它,获取文件和文件夹的列表,并在保持连接的同时递归下载所有内容。

p.S:我已经尝试过通过wget和wget连接的方式--http--用户"uname“--http-密码"passwd”http://www.anysite.com/index.cgi?,但是他们只将网页表单返回给我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-15 18:00:13

如果您使用网页登录,网站可能使用基于cookie的身份验证。(从技术上讲,它可以通过在URI中嵌入凭据来使用HTTP,但在大多数情况下这是一件愚蠢的事情。)如果您使用用户名和密码字段(就像这个)获得一个单独的小型对话框,则它使用的是HTTP身份验证。

如果您尝试使用HTTP登录,并返回登录页面,就像发生在您身上的情况一样,这是站点没有使用HTTP的一个特定指示。

如今,大多数网站都使用基于cookie的身份验证。要使用HTTP (如urllib2 )来实现这一点,您需要在登录表单中对字段执行HTTP。(您可能需要首先请求登录表单,因为站点可能包含您甚至需要登录的cookie,但这通常是不必要的。)这应该会返回一个您可以测试的“成功登录”页面。保存从这个请求中得到的cookie。在提出下一个请求时,请包括这些cookie。您提出的每个请求都可以使用cookie进行响应,您需要保存这些文件,并在下一个请求中再次发送它们。

urllib2有一个名为"cookie jar“的函数,它将在发送请求和接收网页时自动为您处理cookie。这就是你想要的。

票数 2
EN

Stack Overflow用户

发布于 2010-10-16 09:28:37

你可以这样使用吡咯烷醇:

代码语言:javascript
复制
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选项。

票数 1
EN

Stack Overflow用户

发布于 2010-10-15 18:26:08

基于AFAIK cookie的身份验证只在您成功登录至少一次之后才会使用。如果仍然能够下载应该是基于HTTP的身份验证的文件,则可以尝试通过更改浏览器设置从该域禁用cookie。

尝试为登录(可能是POST)登录请求执行一个等效的GET请求,这个请求现在可能发生在登录中。使用firebug或fiddler查看发送的登录请求。还请注意,如果存在一些javascript代码,它将根据您的useragent字符串或其他参数返回一个不同的输出。

看看httplib机械化是否有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3944624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档