2017-07-11 8 views
1

私はPython 3.6でurllibを使用してAPIからいくつかのJSONデータを取得しようとしています。承認のためにヘッダー情報を渡す必要があります。ここに私のコードは次のとおりです。Python 3.6 urllib TypeError:strにバイトを連結できません

import urllib.request, json 

headers = {"authorization" : "Bearer {authorization_token}"} 

with urllib.request.urlopen("{api_url}", data=headers) as url: 
    data = json.loads(url.read().decode()) 
    print(data) 

そして、私が取得エラーメッセージ:、私は、任意のバイトを間違ってここに何が起こっているのか

Traceback (most recent call last): 
    File "getter.py", line 5, in <module> 
with urllib.request.urlopen("{url}", data=headers) as url: 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 223, in urlopen 
return opener.open(url, data, timeout) 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 526, in open 
response = self._open(req, data) 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 544, in _open 
'_open', req) 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 504, in _call_chain 
result = func(*args) 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 1361, in https_open 
context=self._context, check_hostname=self._check_hostname) 
    File "AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", line 1318, in do_open 
encode_chunked=req.has_header('Transfer-encoding')) 
    File "AppData\Local\Programs\Python\Python36-32\lib\http\client.py", line 1239, in request 
self._send_request(method, url, body, headers, encode_chunked) 
    File "AppData\Local\Programs\Python\Python36-32\lib\http\client.py", line 1285, in _send_request 
self.endheaders(body, encode_chunked=encode_chunked) 
    File "AppData\Local\Programs\Python\Python36-32\lib\http\client.py", line 1234, in endheaders 
self._send_output(message_body, encode_chunked=encode_chunked) 
    File "AppData\Local\Programs\Python\Python36-32\lib\http\client.py", line 1064, in _send_output 
+ b'\r\n' 
TypeError: can't concat bytes to str 

Process finished with exit code 1 

すぎてわからない入力ではないよ、私は「なぜ私はわからないんだけど私にエラーを受けて、私はstrにバイトを連結できないと言っています。

ご協力いただきありがとうございます。

+1

私はあなたが感謝を働いた 'ヘッダ= headers' –

答えて

2

data引数は、バイトのようなオブジェクトであると予想されます。次の手順を実行する必要があります。

urllib.request.urlopen({api_url}, data=bytes(json.dumps(headers), encoding="utf-8")) 
+0

を使用すべきだと思います! –

+0

@MatthewWinfield、私は何度もその問題にぶつかってきました。実際、このコード行は私のプロジェクトの1つからコピーされました。 –

関連する問題