2014-01-10 2 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. 

Im догадываясь, что просто проходил правильный авторизованной сессии должна работать - но вопрос в том, как это сделать это так, что я могу извлечь информацию, которую хочу. Из всех других попыток это было самым плодотворным. Пожалуйста, помогите - спасибо!

ответ

3

Кажется, что здесь происходит пара вещей, поэтому я буду обращаться к ним один за другим.

  1. subprocess модуль питона предназначен для использования взывать к системе, как если бы вы были с помощью командной строки. Он ничего не знает о «аутентифицированных сеансах», а командная строка (или оболочка) не знает, как использовать объект python, например сеанс, для работы с phantomjs.

  2. phantomjs имеет привязки python since version 1.8, поэтому я ожидал бы, что это может быть упрощено, используя их. Однако я не использовал их, поэтому я не могу с уверенностью сказать, что они будут полезны.

Я смотрел на yslow «s website и кажется, что нет никакого способа, чтобы передать его содержание, которое вы скачиваете с запросами. Даже тогда, содержание не будет иметь все (например: любой внешне размещенный JavaScript, который будет загружен на selenium/phantomjs или браузер, не загружен запросами)

yslow кажется, что он обычно просто загружает URL для вы и выполняете его анализ. Однако, когда сайт находится за NTLM, он сначала отправляет клиенту ответ 401, который должен указывать клиенту, что он должен аутентифицироваться. Кроме того, информация отправляется клиенту, который сообщает ему, как аутентифицировать и предоставляет ему параметры для использования при аутентификации для NTLM. Вот как requests_ntlm работает с requests. Первый запрос выполнен и генерирует ответ 401, тогда обработчик аутентификации генерирует правильный заголовок (ы) и повторно отправляет запрос, поэтому вы видите ответ 200, привязанный к r.

yslow принимает представление JSON из заголовков, которые вы хотите отправить, так что вы можете попробовать использовать заголовки, найденные в r.request.headers, но я сомневаюсь, что они будут работать.

Короче говоря, это не вопрос, который может вам помочь люди, которые обычно следуют за тегом requests. И, глядя на документацию для yslow, кажется, что она (технически) не поддерживает аутентификацию любого типа. yslow разработчики могут утверждать, что он поддерживает базовую аутентификацию, поскольку он позволяет вам указывать заголовки.

Смежные вопросы