2017-06-22 118 views
1

讓我先說我可能忽略了簡單的事情。如何使用Python對Bluemix CF API進行身份驗證

我試圖用Python和CF API腳本對我的Bluemix帳戶進行一些操作。

首先得到https://api.ng.bluemix.net/info得到authorization_endpoint,https://login.ng.bluemix.net/UAALoginServerWAR/

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

然後張貼到authorization_endpoint得到OAuth令牌。

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) 

然後使用返回的OAuth令牌調用API CF,在這種情況下https://api.ng.bluemix.net/v2/organizations

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) 

但是這導致了404,{ 「描述」: 「未知請求」, 「ERROR_CODE」: 「CF-NOTFOUND」, 「代碼」:10000}。這是正確的方法嗎?我忽略了什麼?

回答

1

這個工作對我來說:

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) 

返回:

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

謝謝你,是的。這也適用於我。我在錯誤的地方尋找我的錯誤。我認爲這是我如何生成令牌。但是在獲得我使用curl命令的工作後,我意識到我的錯誤是一個更簡單和愚蠢的錯字。我使用的網址是https:\\ api.ng.bluemix.net \ V2 \。在某個時候,我設法將'v'資本化。 – user2085050

相關問題