【问题标题】:Need help to use LinkedIn API v2 (oauth2) with Python在 Python 中使用 LinkedIn API v2 (oauth2) 需要帮助
【发布时间】:2018-08-31 19:33:18
【问题描述】:

我使用来自这里的代码https://github.com/ozgur/python-linkedin 以及我的 ID 和密钥。如果我运行此代码并转到 localhost:8080(我使用了此端口),我会收到以下异常:

127.0.0.1 - - [31/Aug/2018 13:25:49] "GET / HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 65176)
Traceback (most recent call last):
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\socketserver.py", line 647, in process_request_thread
    self.finish_request(request, client_address)
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\socketserver.py", line 357, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\http\server.py", line 646, in __init__
    super().__init__(*args, **kwargs)
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\socketserver.py", line 717, in __init__
    self.handle()
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\http\server.py", line 426, in handle
    self.handle_one_request()
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\http\server.py", line 414, in handle_one_request
    method()
  File "C:/Users/osads/PycharmProjects/python-linkedin-master/examples/http_api.py", line 60, in do_GET
    open_new_tab(liw.authentication.authorization_url)
  File "C:\Users\osads\PycharmProjects\python-linkedin-master\linkedin\linkedin.py", line 101, in authorization_url
    qsl = ['%s=%s' % (quote(k), quote(v)) for k, v in qd.items()]
  File "C:\Users\osads\PycharmProjects\python-linkedin-master\linkedin\linkedin.py", line 101, in <listcomp>
    qsl = ['%s=%s' % (quote(k), quote(v)) for k, v in qd.items()]
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\urllib\parse.py", line 791, in quote
    return quote_from_bytes(string, safe)
  File "C:\Users\osads\AppData\Local\Programs\Python\Python37-32\lib\urllib\parse.py", line 816, in quote_from_bytes
    raise TypeError("quote_from_bytes() expected bytes")
TypeError: quote_from_bytes() expected bytes

如何解决这个问题?

UPD:来自linkedin.py的代码

 @property
    def authorization_url(self):
        qd = {'response_type': 'code',
              'client_id': self.key,
              'scope': (' '.join(self.permissions)).strip(),
              'state': self.state or self._make_new_state(),
              'redirect_uri': self.redirect_uri}
        # urlencode uses quote_plus when encoding the query string so,
        # we ought to be encoding the qs by on our own.
        qsl = ['%s=%s' % (quote(k), quote(v)) for k, v in qd.items()]
        return '%s?%s' % (self.AUTHORIZATION_URL, '&'.join(qsl))

【问题讨论】:

  • 你只是在使用 python-linkedin 的例子吗?可能值得发布示例的相关部分,以便我们了解发生了什么。但是你能看一下linkedin.py 的行,看看它在做什么,以及那个时候的坏值是什么?
  • 是的,我使用示例和我所做的所有更改输入我的号码和密钥并选择另一个端口: PORT = 8080 LINKEDIN_API_KEY = '' # 我的密钥 LINKEDIN_API_SECRET = '' # 我的秘密。 linkedin.py 代码添加到问题

标签: python oauth-2.0 linkedin-api


【解决方案1】:

本条目的值

'state': self.state or self._make_new_state()

是一个布尔值。 quote 需要一个字符串。

简而言之,这是您的错误:

from urllib.parse import quote
quote(True)

我不知道你到底在做什么,但这会修复你的错误(并可能产生几个新错误)。

'state': str(self.state or self._make_new_state())

【讨论】:

  • 不,更改后效果相同
  • 其他值是否不是字符串?
  • “状态”中没有任何内容
  • 我不确定,但我认为这是因为:处理来自 ('127.0.0.1', 65176) 的请求期间发生异常。使用的是65167端口,不是我选择的8080,不知道为什么
  • 将qd 中的所有值转换为strings 时会出现同样的错误?
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2014-11-04
  • 2016-08-18
  • 1970-01-01
相关资源
最近更新 更多