AttributeError: 'tuple'对象没有'startswith'属性,使用Python httplib时

1 投票
1 回答
2114 浏览
提问于 2025-04-18 00:33

我正在尝试用Python获取账户信息,这里用的是OAuth 1.0认证。下面是我的代码:

token_url = "oauth/token?" + urlencode(ksort(params)) + "&sig=%s",sig
conn = httplib.HTTPSConnection(url, 443)
conn.request("GET", token_url)

这里出现了这个错误:

Traceback (most recent call last):
  File "C:\Users\windows\Desktop\https.py", line 35, in <module>
    conn.request("GET", token_url)
  File "C:\Python27\lib\httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "C:\Python27\lib\httplib.py", line 1001, in _send_request
    self.putrequest(method, url, **skips)
  File "C:\Python27\lib\httplib.py", line 900, in putrequest
    if url.startswith('http'):
AttributeError: 'tuple' object has no attribute 'startswith'

连接是正常的,但我无法继续进行接下来的HTTPS请求。

1 个回答

2

你传递的是一个元组,而不是一个字符串:

>>> sig = 'sig'
>>> 'oauth/token?blahblah&' + 'sig=%s', sig
('oauth/token?blahblah&sig=%s', 'sig')
>>> 'oauth/token?blahblah&' + 'sig=%s' % sig
'oauth/token?blahblah&sig=sig'

把下面这一行替换成:

token_url = "oauth/token?" + urlencode(ksort(params)) + "&sig=%s",sig
                                                                 ^

用这个:

token_url = "oauth/token?" + urlencode(ksort(params)) + "&sig=%s"%sig

撰写回答