2017-09-05 4 views
0

私は次の特性を持つAPIにアクセスしようとしています:Pythonのオープン、ログインに必要なAPIのhttpsプロトコル

プロトコル:HTTPS

方法:

URL「GET」:「https://api.wmcloud.com/data/v1//api/equity/getEqu.json?field=&listStatusCD=&secID=&ticker=&equTypeCD=A ヘッダー:「許可:ベアラー<トークン> "

URLを開いただけで、そこにあるすべてのデータを見ることができます。私のコードを他の手でそれにアクセスすることはできません。私のコードは:

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}) 

これは、print alldataのときはNoneを返します。

答えて

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 

してください応答データを読み込むのに時間がかかることに注意してください。

関連ドキュメントについては、https://docs.python.org/2.6/library/httplib.html

+0

ありがとうございます。それは働いているようだ。 しかし、より多くのパラメータを渡そうとすると、何も影響しないようです。 パラメータを次のように変更しました。 params = urllib.urlencode({"フィールド": "&"、 "listStatusCD": "L"、 "secID": "000001.XSHE"、 "ticker": "000001" "equTypeCD": "A"}) 'と表示されますが、出力はまだ全人口です。 興味深いことに、このパラメータを印刷すると、「ティッカー」が「secID」の前に常に表示され、コード内ではそれが後になります。 出力: 'field =%26&listStatusCD = L&ticker = 000001&secID = 000001.XSHE&equTypeCD = A' – Liam

+0

@Liamパラメータフィルタは' body'ではなくURLに含める必要があるため動作しません。私は私の答えを更新しました、確認してください。 – 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()) 
    
  • 関連する問題