2014-01-10 201 views
0

我有下面的代码剪断的厚颜无耻地告诉我它是“无法加载undefnied”(神经...)我想将我的身份验证会话传递给使用JavaScript的系统调用。使用要求,HttpNtlmAuth使身份验证系统调用

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”被调用 - 我得到的是以下

FAIL to load undefined. 

即时猜测,只是传递正确的验证会话应该工作 - 但问题是,我该怎么办这样我就可以提取我想要的信息。在所有其他尝试中,这是最有成果的。请帮忙 - 谢谢!

回答

3

似乎有要几件事情会在这里,所以我会解决这些问题一个接一个。

  1. 在Python中subprocess模块是为了使用,如果你是使用命令行来调出该系统。它知道的“验证会话”没什么和命令行(或shell)没有对如何使用Python对象,就像一个会话,与phantomjs工作知识。

  2. phantomjs有python绑定since version 1.8所以我希望这可能会更容易使用它们。但是,我没有使用它们,所以我不能肯定地告诉你它们会有帮助。

我看着yslowwebsite而且似乎是没办法通过它,你与请求下载内容。即使这样,内容就不能拥有一切(例如:将由selenium/phantomjs或浏览器加载任何外部托管的JavaScript,不被请求加载)

yslow好像它通常只是下载的URL你并执行其分析。但是,当网站位于NTLM后面时,它首先向客户端发送401响应,该响应应向客户端指示其必须进行身份验证。此外,将信息发送给客户端,告知客户如何进行身份验证并向NTLM进行身份验证时提供参数以供使用。这是怎么requests_ntlm可与requests。所述第一请求是由与产生401响应,则认证处理产生适当的报头(一个或多个),然后重新发送这就是为什么你看到势必r 200响应该请求。

yslow接受要发送,所以你可以尝试使用r.request.headers发现报头中的标头的JSON表示,但我怀疑他们会工作。

总之,这不是一个问题,谁通常遵循requests标签的人可以帮你。看看yslow的文档,似乎它(技术上)不支持任何类型的身份验证。 yslow开发人员可能会争辩说,它支持基本身份验证,因为它允许您指定标头。