2017-09-05 59 views
0

我想有以下特點來訪問API:Python的開放,需要登錄API https協議

協議:HTTPS

方法:「GET」

網址:「https://api.wmcloud.com/data/v1//api/equity/getEqu.json?field=&listStatusCD=&secID=&ticker=&equTypeCD=A 頭:「授權:持票人<代幣>「

所以,如果我只是打開網址,我可以看到所有的數據。另一方面,我的代碼訪問它不起作用。我的代碼是:

import httplib 
httpClient = httplib.HTTPSConnection('api.wmcloud.com', '443',timeout=60) 
url = 'https://api.wmcloud.com/data/v1//api/equity/getEqu.json?field=&listStatusCD=&secID=&ticker=&equTypeCD=A' 
token='ae8820c8eb8ccd418dd8141b4c685d2d208c58a564a9fd2c22f8c95ac6a2ef23' 
alldata = httpClient.request('GET', url, headers={"Authorization": "Bearer " + token}) 

打印所有數據時它返回無。

回答

0

@yorah已經找到了問題的根本原因:爲了發送HTTP請求,需要調用getresponse()

由於OP使用Python 2和@ yorah的代碼是在Python 3中,這可能不是在OP的環境中工作,我想在下面的Python 2修復和重構的解決方案:

import httplib, urllib, json 
conn = httplib.HTTPSConnection("api.wmcloud.com", 443, timeout=60) 
token = "ae8820c8eb8ccd418dd8141b4c685d2d208c58a564a9fd2c22f8c95ac6a2ef23" 
headers = {"Authorization": "Bearer " + token} 
params = urllib.urlencode({"listStatusCD": "L", "secID": "000001.XSHE", "ticker":"000001", "equTypeCD": "A"}) 
conn.request("GET", "/data/v1/api/equity/getEqu.json?" + params, "", headers) 
r1 = conn.getresponse() 
print r1.status, r1.reason 
result = json.load(r1) 
print len(result['data']) # Expect: 1 

請請注意,加載響應數據需要一些時間。

對於Python 2中的相關文檔,請參考https://docs.python.org/2.6/library/httplib.html

+0

感謝一堆。它似乎在工作。 但是,當我嘗試傳入更多參數時,它似乎不影響任何內容。 我將參數更改爲: 'params = urllib.urlencode({「field」:「&」,「listStatusCD」:「L」,「secID」:「000001.XSHE」,「ticker」:「000001」, 「equTypeCD」:「A」})',但輸出仍然是整個人口。 有趣的是,當打印這個參數時,我發現「ticker」總是在「secID」的前面,而在它後面的代碼中。 輸出:'field =%26&listStatusCD = L&ticker = 000001&secID = 000001.XSHE&equTypeCD = A' – Liam

+0

@Liam參數過濾器不起作用,因爲它應該包含在URL中,而不是'body'。我已經更新了我的答案,請檢查。 – shaochuancs

+0

參數序列無關緊要。另外,由於沒有'field'參數值,它不應該被包含在'params'中''&'是用於分隔URL中多個參數的字符,它不是參數值的一部分。 – shaochuancs

0

來源:https://docs.python.org/3/library/http.client.html


發送request後,您還需要:

  • 得到的迴應
  • 讀取響應(並對其進行解碼)

以下應該做你想要的:

import httplib 
httpClient = http.client.HTTPSConnection('api.wmcloud.com', '443', timeout=60) 
url = 'https://api.wmcloud.com/data/v1//api/equity/getEqu.json?field=&listStatusCD=&secID=&ticker=&equTypeCD=A' 
token='ae8820c8eb8ccd418dd8141b4c685d2d208c58a564a9fd2c22f8c95ac6a2ef23' 
httpClient.request('GET', url, headers={'Authorization': 'Bearer ' + token}) 

alldata = httpClient.getresponse() 

print(alldata.read().decode())