2017-06-22 3 views
1

Lassen Sie mich vorweg sagen, dass ich wahrscheinlich etwas Einfaches übersehe.Wie authentifizieren Sie sich mit Python Bluemix CF API

Ich versuche, einige Manipulation meines Bluemix-Kontos mit Python und der CF-API zu skripten.

Erster zu https://api.ng.bluemix.net/info erhalten, um den authorization_endpoint zu bekommen, https://login.ng.bluemix.net/UAALoginServerWAR/

response = requests.get('https://api.ng.bluemix.net/info') 

Dann schreiben authorization_endpoint OAuth-Token zu erhalten.

results = response.json() 
auth_endpoint = results['authorization_endpoint'] + 'oauth/token?grant_type=password&client=cf' 
http_payload = { 
    'username': id, 
    'password': pw, 
    'client_id': 'cf' 
    } 
auth = ('cf', '') 
response = requests.post(auth_endpoint, data=http_payload, auth=auth) 

dann die zurückgegebene oauth Token verwenden https://api.ng.bluemix.net/v2/organizations die CF API, in diesem Fall zu nennen.

results = response.json() 
url = 'https://api.ng.bluemix.net/v2/organizations' 
authorization = results['token_type'] + ' ' + results['access_token'] 
http_headers = { 
    'accept': 'application/json', 
    'content-type': 'application/json', 
    'authorization': authorization 
    } 
response = requests.get(url, headers=http_headers) 

Aber dies führt zu einem 404, { "description": "Unknown Anfrage", "error_code": "CF-NotFound", "Code": 10000}. Ist das der richtige Ansatz? Was übersehe ich?

Antwort

1

Dies funktioniert für mich:

id = 'changeme' 
pw = 'changeme' 

import json 
import urllib 
import requests 

response = requests.get('https://api.ng.bluemix.net/info') 
results = response.json() 
auth_endpoint = results['authorization_endpoint'] + '/oauth/token' 

data = 'grant_type=password&username={0}&password={1}'.format(id, pw) 
auth = ('cf', '') 
headers = { 
    'accept': 'application/json', 
    'content-type': 'application/x-www-form-urlencoded;charset=utf-8' 
    } 
response = requests.post(auth_endpoint, data=data, headers=headers, auth=auth) 

results = response.json() 
url = 'https://api.ng.bluemix.net/v2/organizations' 
authorization = results['token_type'] + ' ' + results['access_token'] 
http_headers = { 
    'accept': 'application/json', 
    'content-type': 'application/json', 
    'authorization': authorization 
    } 
response = requests.get(url, headers=http_headers) 

print(response.text) 

Returns:

{ 
    "total_results": 6, 
    "total_pages": 1, 
    "prev_url": null, 
    "next_url": null, 
    "resources": [ 
    ... 
} 
+0

Danke, ja. Das funktioniert auch für mich. Ich habe an der falschen Stelle nach meinem Fehler gesucht. Ich dachte, es wäre so, wie ich das Token generiert habe. Aber nachdem ich meinen Zugang zur Arbeit mit curl-Befehlen bekommen hatte, erkannte ich, dass mein Fehler ein einfacherer und ein dummer Tippfehler war. Die URL, die ich verwendete, war https: \\ api.ng.bluemix.net \ V2 \. Irgendwann habe ich es geschafft, das "v" zu kapitalisieren. – user2085050

Verwandte Themen