urllib.request.Request 表示参数无效
urllib.request.Request says arguments are invalid
我收到以下错误:TypeError: sequence item 0: expected bytes, bytearray, or an object with the buffer interface, tuple found
我检查了 Python 文档,urllib.request.Request 的参数似乎是正确的类型。 urllib 中的 POST 请求需要什么类型?
import urllib.parse
import urllib.request
import base64
class TweetGrabber:
def __init__(self, key, secret):
myKey = urllib.parse.quote_plus(key)
mySecret = urllib.parse.quote_plus(secret)
bearerTokenCredentials = myKey + ":" + mySecret
bearerTokenCredentials = bytes(bearerTokenCredentials, "utf-8")
bearerTokenCredentials = base64.b64encode(bearerTokenCredentials)
url = 'https://api.twitter.com/oauth2/token'
userAgent = "Tau v0.1"
authorization = "Basic %s", bearerTokenCredentials
contentLength = 29
acceptEncoding = "gzip"
contentType = "application/x-www-form-urlencoded;charset=UTF-8"
values = {'grant_type' : 'client_credentials'}
headers = {'User-Agent' : userAgent, 'Authorization' : authorization, 'Content-Type' : contentType, 'Content-Length' : contentLength, 'Accept-Encoding' : acceptEncoding}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
print(response.read())
编辑:整个错误消息
Traceback (most recent call last):
File "TweetGrabber.py", line 27, in <module>
x = TweetGrabber("key", "secret")
File "TweetGrabber.py", line 24, in __init__
response = urllib.request.urlopen(req)
File "C:\python34\lib\urllib\request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "C:\python34\lib\urllib\request.py", line 455, in open
response = self._open(req, data)
File "C:\python34\lib\urllib\request.py", line 473, in _open
'_open', req)
File "C:\python34\lib\urllib\request.py", line 433, in _call_chain
result = func(*args)
File "C:\python34\lib\urllib\request.py", line 1217, in https_open
context=self._context, check_hostname=self._check_hostname)
File "C:\python34\lib\urllib\request.py", line 1174, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "C:\python34\lib\http\client.py", line 1090, in request
self._send_request(method, url, body, headers)
File "C:\python34\lib\http\client.py", line 1123, in _send_request
self.putheader(hdr, value)
File "C:\python34\lib\http\client.py", line 1069, in putheader
value = b'\r\n\t'.join(values)
TypeError: sequence item 0: expected bytes, bytearray, or an object with the buf
fer interface, tuple found
authorization = "Basic %s", bearerTokenCredentials
这一行是错误的。 authorization
成为元组而不是字符串。轻松修复:
authorization = "Basic %s" % bearerTokenCredentials
我收到以下错误:TypeError: sequence item 0: expected bytes, bytearray, or an object with the buffer interface, tuple found
我检查了 Python 文档,urllib.request.Request 的参数似乎是正确的类型。 urllib 中的 POST 请求需要什么类型?
import urllib.parse
import urllib.request
import base64
class TweetGrabber:
def __init__(self, key, secret):
myKey = urllib.parse.quote_plus(key)
mySecret = urllib.parse.quote_plus(secret)
bearerTokenCredentials = myKey + ":" + mySecret
bearerTokenCredentials = bytes(bearerTokenCredentials, "utf-8")
bearerTokenCredentials = base64.b64encode(bearerTokenCredentials)
url = 'https://api.twitter.com/oauth2/token'
userAgent = "Tau v0.1"
authorization = "Basic %s", bearerTokenCredentials
contentLength = 29
acceptEncoding = "gzip"
contentType = "application/x-www-form-urlencoded;charset=UTF-8"
values = {'grant_type' : 'client_credentials'}
headers = {'User-Agent' : userAgent, 'Authorization' : authorization, 'Content-Type' : contentType, 'Content-Length' : contentLength, 'Accept-Encoding' : acceptEncoding}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
print(response.read())
编辑:整个错误消息
Traceback (most recent call last):
File "TweetGrabber.py", line 27, in <module>
x = TweetGrabber("key", "secret")
File "TweetGrabber.py", line 24, in __init__
response = urllib.request.urlopen(req)
File "C:\python34\lib\urllib\request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "C:\python34\lib\urllib\request.py", line 455, in open
response = self._open(req, data)
File "C:\python34\lib\urllib\request.py", line 473, in _open
'_open', req)
File "C:\python34\lib\urllib\request.py", line 433, in _call_chain
result = func(*args)
File "C:\python34\lib\urllib\request.py", line 1217, in https_open
context=self._context, check_hostname=self._check_hostname)
File "C:\python34\lib\urllib\request.py", line 1174, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "C:\python34\lib\http\client.py", line 1090, in request
self._send_request(method, url, body, headers)
File "C:\python34\lib\http\client.py", line 1123, in _send_request
self.putheader(hdr, value)
File "C:\python34\lib\http\client.py", line 1069, in putheader
value = b'\r\n\t'.join(values)
TypeError: sequence item 0: expected bytes, bytearray, or an object with the buf
fer interface, tuple found
authorization = "Basic %s", bearerTokenCredentials
这一行是错误的。 authorization
成为元组而不是字符串。轻松修复:
authorization = "Basic %s" % bearerTokenCredentials