使用 python mechanize 通过 NTLM 身份验证登录页面

2023-12-30

我想使用 mechanize 登录页面并检索一些信息。但是我尝试验证它只是失败并显示错误代码HTTP 401,如下所示:

r = br.open('http://intra')
File "bui...e\_mechanize.py", line 203, in open
File "bui...g\mechanize\_mechanize.py", line 255,
in _mech_openmechanize._response.httperror_seek_wrapper: HTTP Error 401: Unauthorized

到目前为止,这是我的代码:

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
# br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# If the protected site didn't receive the authentication data you would
# end up with a 410 error in your face
br.add_password('http://intra', 'myusername', 'mypassword')

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
# Open some site, let's pick a random one, the first that pops in mind:
# r = br.open('http://google.com')
r = br.open('http://intra')
html = r.read()

# Show the source
print html

我究竟做错了什么?来访http://intra(内页)例如chrome,它会弹出一个窗口并询问用户名/密码一次,然后一切都很好。

弹出的对话框如下所示:


经过大量研究后,我设法找出了这背后的原因。

查找所有网站都使用所谓的NTLM认证 http://hc.apache.org/httpclient-legacy/authentication.html#Authentication_Schemes,机械化不支持。 这可以帮助找出站点的身份验证机制:

wget -O /dev/null -S http://www.the-site.com/

所以代码稍微修改了一下:

import sys
import urllib2
import mechanize
from ntlm import HTTPNtlmAuthHandler

print("LOGIN...")
user = sys.argv[1]
password = sys.argv[2]
url = sys.argv[3]

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
# create the NTLM authentication handler
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)

browser = mechanize.Browser()
handlersToKeep = []

for handler in browser.handlers:
    if not isinstance(handler,
    (mechanize._http.HTTPRobotRulesProcessor)):
        handlersToKeep.append(handler)

browser.handlers = handlersToKeep
browser.add_handler(auth_NTLM)

response = browser.open(url)
response = browser.open("http://www.the-site.com")
print(response.read())

最后,如前所述,需要修补机械化here https://stackoverflow.com/questions/13649964/python-mechanize-with-ntlm-getting-attributeerror-httpresponse-instance-has-no:

--- _response.py.old    2013-02-06 11:14:33.208385467 +0100
+++ _response.py    2013-02-06 11:21:41.884081708 +0100
@@ -350,8 +350,13 @@
             self.fileno = self.fp.fileno
         else:
             self.fileno = lambda: None
-        self.__iter__ = self.fp.__iter__
-        self.next = self.fp.next
+
+        if hasattr(self.fp, "__iter__"):
+            self.__iter__ = self.fp.__iter__
+            self.next = self.fp.next
+        else:
+            self.__iter__ = lambda self: self
+            self.next = lambda self: self.fp.readline()

     def __repr__(self):
         return '<%s at %s whose fp = %r>' % (
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python mechanize 通过 NTLM 身份验证登录页面 的相关文章

随机推荐

  • 唯一索引与使用唯一索引的唯一约束

    我正在尝试比较两个模式以确保它们同步 在一个模式中 我看到 2 列上有一个唯一索引 除此之外 我还看到了使用唯一索引的唯一约束 我是Oracle新手 但我的一般理解和根据this https stackoverflow com questi
  • 我应该使用什么数据结构来模拟 Cassandra 中的“按计数器排序”?

    假设我目前有一张这样的桌子 create table comment counters contentid uuid commentid uuid liked counter PRIMARY KEY contentid commentid
  • unix 脚本 - 制作文本文件时出现问题

    我正在编写一个简单的unix脚本 如下所示 bin bash mkdir tmp temp1 cd tmp temp1 echo ab bc cj nn mm gt output txt grep ab output txt gt newo
  • 在断言中使用“sequence.triggered”时重置感知

    我有一些断言使用triggered序列的性质 这对于检查 当 X 发生时 Y 一定在过去的某个时间发生 形式的属性很有用 让我们举一个简单的例子 给定三个信号 a b and c c仅允许在以下情况下走高 a3 个周期前为高 并且b2 个周
  • javafx 中每个 .css 文件和行的“未知属性”警告

    当我从 git 导入团队的小组项目时遇到问题 当导入到 Eclipse 时 我必须从构建路径库添加 JavaFX SDK 一旦我打开其中包含 css 文件的样式包 它们都会有每行代码下方有黄色警告线 例如 label fx font siz
  • ADO.NET 实体框架教程 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • frama-c mingw __restrict__ 关键字

    我是 Frama C 的新手 我想在Windows环境下运行它 我的编译器是gcc mingw 我尝试运行价值分析教程中的相同示例 因为我对库头文件有问题 我发现无法运行 frama c 因为restrict关键词 它显示 string h
  • 来自 sk_buff 的 IP 地址

    我正在编写一个注册 netfilter 挂钩的内核模块 我试图通过使用来获取呼叫者的IP地址sk buff gt saddr成员 有没有办法获得人类可读的 IP 即 x x x x 格式 我找到了这个功能inet ntop 但它似乎在内核头
  • 如何从 VC++ 2008 开发的 GUI 中打开帮助文件(chm 等)?

    我正在尝试为我在 VC 2008 中开发的 GUI 添加一些帮助 我想编译一个 chm 文件 或者一个可以从我的菜单访问的 hlp 文件 任何人都可以告诉我如何执行此操作吗 多谢 Under HKLM Software Microsoft
  • 如何在 Heroku 上托管的 Django 项目中使用 Werkzeug 交互式回溯调试器?

    在 Django 项目中安装了 django extensions 后 您可以在本地计算机上使用manage py runserver plus激活非常有用的 Werkzeug 调试器 这样 500 错误页面就可以让您以交互方式浏览堆栈 从
  • 如果操作未经过身份验证,expressJS 呈现登录引导模式

    我正在编写一个expressjs ejs应用程序 它使用Twitter Bootstrap 3作为网页 我使用 Bootstrap Modal 进行登录 我已将模式包含在标题部分中 因此它可用于每个网页 但是 如果用户尚未登录 则需要先进行
  • 如何捕获Kafka-Spring中的反序列化错误?

    我正在启动一个使用 kafka 消息的应用程序 我跟着Spring文档 https docs spring io spring kafka docs 2 2 4 RELEASE reference error handling deseri
  • Android-L CardView 视觉触摸反馈

    谁能向我解释一下如何在 CardView 中实现 Google I O 2014 上演示的一些视觉触摸反馈 这是我在 XML 中使用 CardView 的方式 可能缺少一些小东西 所以我只是想知道是否有人可以帮助我
  • 导入其他依赖项需要的依赖项版本[重复]

    这个问题在这里已经有答案了 我有两个箱子X and Z我想同时使用但是X依赖于取决于Z在某些特定版本上 例如 mongodb依赖于tokio 0 2 而我使用的是tokio 0 3 X不再出口Z所以我 认为 必须手动指定Z in Cargo
  • 使用 Json.Net 反序列化,将子对象反序列化为保存 json 的 string/similar?

    我正在尝试使用 Json 创建一个配置文件 该文件将保存各种类型对象的配置 考虑这个文件 cameras type Some Namespace CameraClass assembly Some Assembly configuratio
  • 更改主页按钮的长按功能

    我正在寻找 Android 技巧 来更改长按主页按钮的功能 目前 长按主页按钮打开任务管理器 相反 我希望长单击充当短单击 这意味着将我们带到默认启动器的主页 理想情况下 这个技巧适用于所有 Android 版本 但如果它仅适用于 2 3
  • 通过 C# 在 excel 中使用模板

    作为我正在生成的 C 程序的一部分 我需要生成 1 个工作簿 其中包含 2 个不同的工作表和第 3 个可以多次生成的工作表 最有效的方法是什么 我已经研究过使用模板 尽管我不确定如何重复某些工作表 同时只显示其他工作表一次 任何帮助或建议将
  • 用于从视频创建小 gif 的 Lib/API?

    我想从现有视频创建 GIF 我搜索了相关问题 但没有找到任何可以帮助我的链接 我一直在寻找任何可以帮助我从视频创建位图的库或 API 然后我将再次从该位图创建 GIF 或直接从视频创建 GIF 是否有任何库或 API 可以从视频中捕获位图序
  • 打字稿“元素类型上不存在属性”

    我将开始我的 Typescript 之旅 所以我有video在我的 Html 和中标记 ts将这些行归档 class KomakhaPlayer private container private video Element this co
  • 使用 python mechanize 通过 NTLM 身份验证登录页面

    我想使用 mechanize 登录页面并检索一些信息 但是我尝试验证它只是失败并显示错误代码HTTP 401 如下所示 r br open http intra File bui e mechanize py line 203 in ope