Soru Python'da bir taşıyıcı belirteci gerektiren bir API ile bir API çağrısı yapmak


Bir JSON API çağrısının bir Python programına entegre edilmesiyle ilgili yardım almak.

Aşağıdaki API'yi çağrılmasını ve yanıtın yazdırılmasını sağlayan bir Python .py programına entegre etmeyi düşünüyorum.

API rehberi, başarılı bir şekilde yaptığım API'ye çağrılara izin vermek için bir taşıyıcı belirtecinin oluşturulması gerektiğini bildirir. Ancak bu belirteci Python API isteğinde taşıyıcı belirteci kimlik doğrulaması olarak içerecek sözdiziminden emin değilim.

Yukarıdaki talebi cURL kullanarak bir belirteç kullanarak başarıyla tamamlayabilirim. "Urllib" ve "istekleri" yolları denedim ama boşuna.

Tam API ayrıntıları: IBM X-Force Exchange API Belgeleri - IP Reputation


25
2018-04-28 23:25


Menşei




Cevaplar:


Sadece başlık verilerinizde bir anahtar olarak beklediğiniz anlamına gelir

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

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

42
2018-04-28 23:33



Yukarıdaki, aşağıdaki sözdizimi hatasını atar: 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  Aşağıdaki kod: 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()  Herhangi bir fikir? - user4657
eski bir isteklerin var. json senin versiyonunda bir dict ve bir fonksiyon değil requests.post(...).json  ... onu arama - Joran Beasley
Teşekkürler Joran Beasley. Güncelleme İstekleri kütüphanesi pip ile ve bu bana orijinal sözdizimi tutmak için izin verdi. Ancak şimdi yukarıda çalıştırdığımda bu .json yanıtı çıktı: {u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}  Bu, doğrudan bir tarayıcıda URL’ye basmış olmama benzer. Belirteçle bir şey mi özledim yoksa son nokta yapılandırılmış mı? Kod: 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
Maalesef bu konuda gerçekten yardımcı olamıyorum ... ya kötü bir son nokta veya kimlik bilgileriniz geçersiz (örnek kodlarını kullanıyorsunuz, sadece URL'leri için yapılandırıldınız mı?) veya belki de uygulama URL'nizi kendi delilerine koymanız gerekiyor kodunuz için panel ... şansınız bu ilk belirteciniz ... daha sonra kalıcı bir simge almak için kullanabileceğiniz bir yenileme belirteci için belirteç almanız gerekir (en azından oauth2 genellikle nasıl çalışır?) - Joran Beasley
whoops yanlış başlık vardı gibi güncellenen kodu deneyin - Joran Beasley


Simge, aşağıdaki biçime göre bir Yetkilendirme başlığına yerleştirilmelidir:

Yetkilendirme: Taşıyıcı [Token_Value]

Aşağıdaki kod:

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

11
2018-04-29 12:51