Python: необходимо добавить дополнительный заголовок после скрытых настроек по умолчанию, добавленных urllib2, перед отправкой запроса - PullRequest
1 голос
/ 02 августа 2011

Я знаю, как получить заголовки ответа на запрос urllib2, а также как получить доступ к отправленным и распечатать их, и запрос выполнен, как подробно описано в ответах на этот вопрос .

Однако мне нужно перехватить запрос после заголовки по умолчанию, такие как 'Content-Type', добавленные OpenerDirector, но до , запрос фактически отправлен, потому что мне нужно добавить дополнительный заголовок авторизации (для работы с API, с которым я работаю), который представляет собой хэш различных вещей, включая все стандартные заголовки в запросе.

Обратите внимание, что я также использую свой собственный подкласс Request, который позволяет мне отправлять запросы PUT / HEAD / DELETE в дополнение к запросам GET / POST, и эта функциональность должна сохраняться любым решением этой новой проблемы, с которой я сталкиваюсь.

TL; DR: необходимо получить доступ ко всем заголовкам по умолчанию, добавленным OpenerDirector, и использовать их для добавления нового заголовка до фактической отправки запроса.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Просто несколько идей:

Реализация в urllib2.py:

def _open(self, req, data=None):
    result = self._call_chain(self.handle_open, 'default',
                              'default_open', req)
    if result:
        return result

    protocol = req.get_type()
    result = self._call_chain(self.handle_open, protocol, protocol +
                              '_open', req)
    if result:
        return result

    return self._call_chain(self.handle_open, 'unknown',
                            'unknown_open', req)

Я бы предложил вам скопировать urllib2.py для отладки в ваш каталог, а затем добавить выходные данные отладки. Нужно заглянуть в словарь self.handle_open ...

0 голосов
/ 03 августа 2011

В моем случае я просто решил вручную установить все заголовки, которые должны быть хешированы, прежде чем запрос перейдет в OpenerDirector, вместо того, чтобы пытаться перехватить и сделать это. Я работаю с Python только около недели, поэтому у меня нет уверенности и глубины знаний, чтобы в этот момент приступить к более сложному решению.

0 голосов
/ 03 августа 2011

Вот другое решение: если вы вычисляете генерируемые заголовки, эти заголовки уже есть, и ваше значение хеша будет правильным. Какие заголовки генерируются? Я предполагаю, что длина содержимого - один из них.

...