2016-11-17 2 views
0

Я пытаюсь использовать cookie из браузера механизации, который я использую для входа на сайт в сеансе запросов, но всякий раз, когда я делаю запрос с сеанса, я получаю TypeError ,TypeError для cookielib CookieJar cookie в запросах Session

Я сделал удобный класс для использования АНИ подвергается сайтом (большая часть фактически полезного кода удаляется, это маленький пример):

from __future__ import absolute_import, division, print_function, unicode_literals 
import requests 
import mechanize 
import cookielib 

class Requester: 
    def __init__(self, api_root_url): 
     self.api_root_url = api_root_url 
     self.s = requests.Session() 
     self.new_cookie() 

    def new_cookie(self): 
     br = mechanize.Browser() 
     cookie_jar = cookielib.CookieJar() 
     br.set_cookiejar(cookie_jar) 

     # Acquire cookies by logging in with mechanize browser 

     self.s.cookies.set('v_cookies', cookie_jar) 

    def make_request(self, req_method, endpoint): 
     url = self.api_root_url + endpoint 
     method = getattr(self.s, method) 
     response = method(url) 
     return response 

Из другого сценария я использую этот класс делать запросы, как это:

from __future__ import absolute_import, division, print_function, unicode_literals 
from requester import Requester 

req = Requester(api_root) 

response = req.make_request('get', endpoint) 

И я получаю эту ошибку от response = method(url) линии:

File "...\Anaconda2\lib\cookielib.py", line 1301, in _cookie_attrs 
    self.non_word_re.search(cookie.value) and version > 0): 
TypeError: expected string or buffer 

При тестировании простого запроса GET с кодом ниже, линия производства r1 работает, но линия дает r2 не

def make_request(self, req_method, endpoint): 
    url = self.api_root_url + endpoint 
    cookies = self.s.cookies.get('v_cookies') 
    r1 = requests.get(url, cookies=cookies) 
    r2 = self.s.get(url) 

Как правильно использовать куки с объектом requests.Session?

ответ

1

Вы не хотите, чтобы установить значение одного печенья в cookies к CookieJar: он уже являетсяCookieJar:

>>> s = requests.Session() 
>>> type(s.cookies) 
<class 'requests.cookies.RequestsCookieJar'> 

Вы, вероятно, лучшее время, просто установив s.cookies к вашему cookiejar:

def new_cookie(self): 
    br = mechanize.Browser() 
    cookie_jar = cookielib.CookieJar() 
    br.set_cookiejar(cookie_jar) 

    # Acquire cookies by logging in with mechanize browser 

    self.s.cookies = cookie_jar 
Смежные вопросы