2014-01-10 7 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]) 

문제는 "전화"가 호출 될 때입니다 - 내가 할 모든 단지 올바른 인증 된 세션을 전달하는 일을해야한다고 추측 다음

FAIL to load undefined. 

임 -하지만 문제는 내가 어떻게입니다 내가 원하는 정보를 추출 할 수있는 그런 것. 다른 모든 시도들 중에서 이것은 가장 유익한 것입니다. 도와주세요 - 고마워요!

답변

3

여기에 몇 가지 일이있는 것처럼 보이므로 한 번에 하나씩 살펴 보겠습니다. 파이썬에서

  1. subprocess 모듈은 명령 줄을 사용하는 것처럼 시스템를 호출하는 데 사용하기위한 것입니다. "인증 된 세션"에 대해 아무것도 알지 못하며 명령 줄 (또는 셸)은 세션과 같이 파이썬 객체를 사용하는 방법에 대한 지식이 전혀 없으므로 phantomjs과 작동합니다.

  2. phantomjs에는 파이썬 바인딩 since version 1.8이 있습니다. 따라서 이것을 사용하면 더 쉽게 만들 수 있습니다. 나는 그들을 사용하지 않았으므로 도움이 될 것이라고 확실히 말할 수는 없습니다.

나는 yslowwebsite를 보았고, 그것을 당신이 요청 다운로드 컨텐츠를 전달할 수있는 방법은없는 것처럼 보인다. 그렇다하더라도, 내용 (예 : selenium/ phantomjs 또는 브라우저에 의해로드 될 수있는 외부 호스팅 자바 스크립트 요청에 의해로드되지 않음)이 제대로 표시되지 않는 것이 일반적으로 단지의 URL을 다운로드하는 것처럼

yslow 보인다 당신과 그 분석을 수행합니다. 그러나 웹 사이트가 NTLM 뒤에 있으면 먼저 클라이언트에게 인증해야하는 클라이언트에게 401 응답을 보냅니다. 또한 클라이언트에게 인증 방법을 알려주는 정보가 전송되고 NTLM에 대한 인증시 사용할 매개 변수가 제공됩니다. 이것은 requests_ntlmrequests과 작동하는 방식입니다. 첫 번째 요청이 만들어지고 401 응답이 생성되면 인증 처리기에서 적절한 헤더를 생성하고 요청을 다시 보냅니다. 따라서 응답은 r에 바인딩됩니다.

yslow 당신은 그래서 당신은 r.request.headers에서 발견 된 헤더를 사용하는을 시도 할 수 있습니다 보낼 헤더의 JSON 표현을 허용하지만, 나는 그들이 작동합니다 의심한다.

간단히 말해서, 이것은 일반적으로 requests 태그를 따르는 사람들이 도움을 줄 수있는 질문이 아닙니다. yslow에 대한 설명서를 보면 (기술적으로) 모든 유형의 인증을 지원하지 않는 것으로 보입니다. yslow 개발자는 헤더를 지정할 수 있으므로 기본 인증을 지원한다고 주장 할 수 있습니다.