首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用请求,HttpNtlmAuth使用身份验证进行系统调用。

使用请求,HttpNtlmAuth使用身份验证进行系统调用。
EN

Stack Overflow用户
提问于 2014-01-10 22:17:17
回答 1查看 8.2K关注 0票数 3

我有下面的代码片段,它大胆地告诉我,它是“未能加载未防御”(神经.)我正在尝试将经过身份验证的会话传递给使用javascript的系统调用。

代码语言:javascript
复制
    import requests
    from requests_ntlm import HttpNtlmAuth
    from subprocess import call
    # THIS WORKS - 200 returned


    s = requests.Session()
    r = s.get("http://example.com",auth=HttpNtlmAuth('domain\MyUserName','password'))
    call(["phantomjs", "yslow.js", r.url])

问题是"calL“何时被调用--我得到的只有以下内容

代码语言:javascript
复制
FAIL to load undefined.

我猜想,只要通过正确的认证会话就可以了--但问题是我该如何做才能提取我想要的信息。在所有其他尝试中,这是最富有成效的尝试。帮帮忙-谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2014-01-11 17:29:56

这里好像有几件事要做,所以我会一个接一个地讲。

  1. python中的subprocess模块用于调用系统,就像使用命令行一样。它对“通过身份验证的会话”一无所知,命令行(或shell)不知道如何像会话一样使用python对象来使用phantomjs
  2. phantomjs自1.8版起的python绑定,所以我希望使用它们可以使这更容易。但是,我没有使用它们,所以我不能肯定地告诉你,它们会有帮助的。

我查看了yslow网站,似乎没有办法将您正在通过请求下载的内容传递给它。即使这样,内容也不会拥有所有内容(例如:任何将由selenium/phantomjs或浏览器加载的外部托管的javascript都不会被请求加载)。

yslow似乎通常只是为您下载URL并执行其分析。然而,当网站在NTLM后面时,它首先向客户端发送401响应,该响应应该向客户端表明它必须进行身份验证。此外,信息被发送到客户端,客户端告诉它如何进行身份验证,并提供用于NTLM身份验证时使用的参数。这就是requests_ntlmrequests的工作方式。发出第一个请求并生成一个401响应,然后身份验证处理程序生成适当的标头并重新发送请求,这就是为什么您看到绑定到r的200个响应。

yslow接受您希望发送的头部的JSON表示,这样您就可以尝试使用在r.request.headers中找到的标题,但我怀疑它们是否有效。

简而言之,这不是一个通常遵循requests标签的人可以帮助你解决的问题。从yslow的文档来看,它(技术上)似乎不支持任何类型的身份验证。不过,yslow开发人员可能认为它支持基本身份验证,因为它允许您指定标头。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21055479

复制
相关文章

相似问题

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