2012-09-27 27 views
6

Tôi đã đập đầu vào tường để tìm ra cách gửi yêu cầu được xác thực với oauth.Cách gửi yêu cầu oauth bằng python-oauth2

Tôi đã có thể nhận mã thông báo truy cập, nhưng không hoàn toàn chắc chắn cách gửi yêu cầu với họ. Tôi thấy điều này trên thông tin nhà phát triển của twitter của:

https://dev.twitter.com/docs/auth/oauth/single-user-with-examples#python trong đó có một số mã ví dụ cho việc gửi một yêu cầu ủy quyền:

def oauth_req(url, key, secret, http_method="GET", post_body=None,http_headers=None): 
    consumer = oauth.Consumer(key=consumerKey, secret=consumerSecret) 
    token = oauth.Token(key=tokenKey, secret=tokenSecret) 
    client = oauth.Client(consumer, token) 
    resp, content = client.request(
     url, 
     method=http_method, 
     body=post_body, 
     headers=http_headers, 
     #force_auth_header=True                                     
     ) 
    return resp,content 

oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 

Tuy nhiên, khi tôi bao gồm tất cả các thông tin của tôi, tôi nhận được lỗi sau:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/tmp/python-22060Umg.py", line 153, in <module> 
    transactions = oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 
    File "/tmp/python-22060Umg.py", line 76, in oauth_req 
    force_auth_header=True 
TypeError: request() got an unexpected keyword argument 'force_auth_header' 

trong đó: người dùng là người dùng thực tế (tôi đã xóa nó khỏi bài đăng) và tokenKey/tokenSecret là mã thông báo truy cập.

Tôi nghĩ có lẽ đó là đơn giản như cho ý kiến ​​ra dòng vi phạm, nhưng không có may mắn như vậy:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/tmp/python-22060hwm.py", line 153, in <module> 
    transactions = oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 
    File "/tmp/python-22060hwm.py", line 75, in oauth_req 
    headers=http_headers 
    File "/usr/lib/python2.7/dist-packages/oauth2/__init__.py", line 662, in request 
    req.sign_request(self.method, self.consumer, self.token) 
    File "/usr/lib/python2.7/dist-packages/oauth2/__init__.py", line 493, in sign_request 
    self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest()) 
TypeError: must be string or buffer, not None 

Vì vậy, bây giờ, stackoverflow, bạn là hy vọng duy nhất của tôi! Bất kỳ ai cũng có đề xuất về cách sử dụng mã thông báo truy cập của tôi để gửi yêu cầu?

cảm ơn!

+0

bạn có thể đăng mã của mình không? không thực sự có thể giúp đỡ mà không có nó – jterrace

+0

Mã này giống như từ liên kết trong bài đăng gốc. Tôi đã chỉnh sửa bài gốc để chứa mã; cảm ơn! –

Trả lời

10

Tài liệu của Twitter đã lỗi thời - phiên bản của oauth2 chúng liên kết đến là một ngã ba 3 tuổi. Không có lý luận từ khóa force_auth_header nữa cho oauth2.Client.request

Lý do tại sao bạn vẫn nhận được lỗi ngay cả sau khi loại bỏ các dòng vi phạm là bởi vì giá trị mặc định cho post_bodyNone mà được thông qua thẳng qua để oauth2.Client.request. Bạn sẽ không thể làm điều đó trong thực tế. Bạn sẽ phải yêu cầu đối số đó, chọn một giá trị mặc định hoạt động (ví dụ: một chuỗi rỗng) hoặc kiểm tra trước khi bạn vượt qua nó để ngăn chặn lỗi này.

4

Chỉ cần để mở rộng kiến ​​Rafe của ...

Phần lớn các thư viện OAuth bằng Python là vô cùng bị hỏng, hết hạn, và không còn duy trì. Hầu hết trong số họ thậm chí không vượt qua các bài kiểm tra riêng của họ, hãy để một mình các đặc điểm kỹ thuật định dạng. Twitter không nên tham khảo bất kỳ thứ gì trong số đó, nhưng họ làm.

Twython là một twitter client Python mà kết thúc tốt đẹp OAuth - https://github.com/ryanmcgrath/twython - nó kết thúc tốt đẹp spec OAuth1 qua requestsrequests-oauth gói - , http://pypi.python.org/pypi/requests-oauth - nhưng Twitter API chấp nhận đó.

về oAuth 2, thư viện này có một số công việc gần đây đang cố gắng triển khai (cam kết cuối cùng 2 tháng trước) - https://github.com/idan/oauthlib. tôi đã không thử nó bản thân mình, và chỉ phát hiện ra về nó ngày hôm qua.

để thêm nhanh - ngay cả khi bạn đang sử dụng etsy, bạn có thể đảo ngược twython kỹ sư để sử dụng điểm cuối etsy nếu chúng hỗ trợ oauth1.

+0

Nếu bạn cần thư viện khách hàng toàn diện, được duy trì cho OAuth 1.0/a và 2.0, bạn có thể thử [rauth] (https://github.com/litl/rauth). – maxcountryman

Các vấn đề liên quan