পাইথনে এমন একটি এপিআই কল করা যা একটি বাহক টোকেন প্রয়োজন


91

পাইথন প্রোগ্রামে একটি JSON এপিআই কলটি সংহত করার জন্য কিছু সহায়তার সন্ধান করছেন।

আমি নীচের এপিআইটিকে একটি পাইথন .পি প্রোগ্রামের সাথে সংযুক্ত করতে চাইছি যাতে এটি কল করার অনুমতি দেওয়া হয় এবং প্রতিক্রিয়াটি মুদ্রিত হয়।

এপিআই গাইডেন্সে বলা হয়েছে যে এপিআইতে কলগুলি অনুমতি দেওয়ার জন্য অবশ্যই একটি বাহক টোকেন উত্পন্ন করা উচিত, যা আমি সফলভাবে করেছি। তবে পাইথন এপিআই অনুরোধে এই টোকেনটি বহনকারী টোকেন প্রমাণীকরণ হিসাবে অন্তর্ভুক্ত করার সিনট্যাক্স সম্পর্কে আমি অনিশ্চিত।

আমি টোকেন অন্তর্ভুক্ত সহ সিআরএল ব্যবহার করে উপরের অনুরোধটিকে সফলভাবে শেষ করতে পারি। আমি "urllib" এবং "অনুরোধ" রুট চেষ্টা করেছি কিন্তু কোন ফলসই হয়নি।

সম্পূর্ণ এপিআইয়ের বিশদ: আইবিএম এক্স-ফোর্স এক্সচেঞ্জ এপিআই ডকুমেন্টেশন - আইপি খ্যাতি

উত্তর:


142

এটির অর্থ এটি কেবলমাত্র আপনার শিরোনামের ডেটাতে কী হিসাবে প্রত্যাশা করে

import requests
endpoint = ".../api/ip"
data = {"ip": "1.1.2.3"}
headers = {"Authorization": "Bearer MYREALLYLONGTOKENIGOT"}

print(requests.post(endpoint, data=data, headers=headers).json())

উপরেরটি নীচের সিনট্যাক্স ত্রুটিটি ছুড়ে ফেলেছে: Traceback (most recent call last): File "bearerreturn.py", line 6, in <module> print requests.post(endpoint,data=data,headers=headers).json() TypeError: 'dict' object is not callable নীচে কোড: import requests endpoint = "https://xforce-api.mybluemix.net:443/api/ip" data = {"ip":"1.1.2.3"} headers = {"Bearer token":"TOKEN WAS INSERTED HERE"} print requests.post(endpoint,data=data,headers=headers).json() কোনও ধারণা?
ব্যবহারকারী4657

আপনার কাছে অনুরোধগুলির একটি পুরানো সংস্করণ আছে ... jsonআপনার সংস্করণে একটি ডিক এবং কোনও ফাংশন নয় requests.post(...).json ... এটি কল করবেন না
জোড়ান ব্যাসলি

ধন্যবাদ জোড়ান বিসলে পাইপের মাধ্যমে অনুরোধের অনুরোধ লাইব্রেরি এবং এটি আমাকে মূল বাক্য গঠন রাখতে দেয়। তবে এখন যখন আমি উপরেরটি চালিত করি তখন এটি। জসন প্রতিক্রিয়াটিকে আউটপুট করে দেয়: {u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'} এটি ঠিক যেমন আমি সরাসরি ব্রাউজারে ইউআরএল হিট করি। আমি কি টোকেনের সাথে কিছু মিস করছি বা উপায়টি শেষ পয়েন্টটি কনফিগার করা হয়েছে? কোড:import requests endpoint = "https://xforce-api.mybluemix.net:443/ipr/" data = {"ip":"1.1.2.3"} headers = {"Bearer token":"TOKEN_HERE"} print requests.post(endpoint,data=data,headers=headers).json()
user4657

দুর্ভাগ্যক্রমে আমি এর সাথে সত্যই সহায়তা করতে পারি না ... এটি হয় একটি খারাপ এন্ডপয়েন্ট বা আপনার শংসাপত্রগুলি অবৈধ (আপনি কি তাদের উদাহরণ টোকেনটি ব্যবহার করছেন, এটি কেবল তাদের ইউআরএলটির জন্য কনফিগার করা আছে?) অথবা সম্ভবত আপনার অ্যাপ্লিকেশন ইউআরএল তাদের মুছে ফেলার মধ্যে রাখতে হবে আপনার কোডের জন্য প্যানেল ... সম্ভাবনাগুলি আপনার প্রথম টোকেনকে থামিয়েছে ... আপনাকে রিফ্রেশ টোকেনের জন্য টোকেন বিনিময় করতে হবে যা আপনি আরও স্থায়ী টোকেন পেতে ব্যবহার করতে পারেন (কমপক্ষে ওআউথ 2 কীভাবে কাজ করে তা চালিয়ে যায় ..)
জোড়ান বিসলে

উফস দেখে মনে হচ্ছে আপডেটের কোডটি ব্যবহার করে আমার
শিরোনামটি

50

আপনি যদি requestsমডিউল ব্যবহার করছেন তবে একটি বিকল্প বিকল্প হ'ল " প্রমাণীকরণের নতুন ফর্মগুলি " তে আলোচিত লেখক শ্রেণীর লেখার জন্য :

import requests

class BearerAuth(requests.auth.AuthBase):
    def __init__(self, token):
        self.token = token
    def __call__(self, r):
        r.headers["authorization"] = "Bearer " + self.token
        return r

এবং তারপরে আপনি এই জাতীয় অনুরোধগুলি প্রেরণ করতে পারেন

response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))

যা আপনাকে authবেসিক লেখকের মতো একই যুক্তি ব্যবহার করতে দেয় এবং নির্দিষ্ট পরিস্থিতিতে আপনাকে সহায়তা করতে পারে।


এটি জিপের সাথেও কার্যকর হতে পারে। এটি অনুরোধগুলি ব্যবহার করে
a

20

টোকনটি নিম্নলিখিত ফর্ম্যাট অনুসারে একটি অনুমোদনের শিরোনামে রাখতে হবে:

অনুমোদন: বহনকারী [টোকেন_ভ্যালু]

নীচে কোড:

import urllib2
import json

def get_auth_token()
    '''
    get an auth token
    '''
     req=urllib2.Request("https://xforce-api.mybluemix.net/auth/anonymousToken")
     response=urllib2.urlopen(req)
     html=response.read()
     json_obj=json.loads(html)
     token_string=json_obj["token"].encode("ascii","ignore")
     return token_string

def get_response_json_object(url, auth_token)
    '''
      returns json object with info
    '''
    auth_token=get_auth_token()
    req=urllib2.Request(url, None, {"Authorization": "Bearer %s" %auth_token})
    response=urllib2.urlopen(req)
    html=response.read()
    json_obj=json.loads(html)
    return json_obj

পাইথন req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)
সিডজে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.