2016-11-17 6 views
0

リクエストセッションのサイトにログインするために使用する機械化ブラウザのクッキーを使用しようとしていますが、セッションからリクエストを行うたびにTypeError 。CookieのTypeErrorリクエストのCookieJarクッキーセッション

私は(実際に便利なコードのほとんどが削除され、これは小さな一例です)サイトによって公開されたAPIを使用するための便利なクラスを作った:

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

あなたはCookieJarcookiesにおける単一Cookieの値を設定する必要はありません:それはすでにCookieJar次のとおりです。

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

あなたはおそらく、単にs.cookiesを設定することで、より良い時間を持っていますあなたのクッキージャーに:

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 
関連する問題