<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 結合使用 GET 和 Authorization 標頭 (Python) 以下示例說明如何使用 [根據方案編號獲取內容列表](http://open.gsdata.cn/article/info?id=1) API 發出請求。該請求發出 GET 請求,并使用 Authorization 標頭將身份驗證信息發送到 GSDATA。 ~~~ #!/usr/bin/python # -*- coding: UTF-8 -*- # GET 請求 的 gsdata 簽名示例 # in the Authorization header. import sys, os, base64, datetime, hashlib, hmac import requests # pip install requests # ************* 請求參數 ************* method = 'GET' service = '/pubsent/v1/contents' host = 'api.gsdata.cn' request_parameters = 'media=0&order=desc&page=1&per-page=8&sid=92906&sortby=time' # 簽名密鑰 def sign(key, msg): return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest() def getSignatureKey(key, dateStamp, serviceName): kDate = sign(('GSDATA' + key).encode('utf-8'), dateStamp) kService = sign(kDate, serviceName) kSigning = sign(kService, 'gsdata_request') return kSigning # 開放平臺中的應用信息 app_id = "***" secret_key = "*******" if app_id is None or secret_key is None: print 'No access key is available.' sys.exit() # 創建時間信息 t = datetime.datetime.utcnow() gsdate = t.strftime('%Y%m%dT%H%M%SZ') datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope # ************* TASK 1: 創建規范請求 ************* # Step 1 確認 HTTP 請求方法(GET、PUT、POST 等). # Step 2: 創建規范URI——從域到查詢的URI的一部分 canonical_uri = service # Step 3: 創建規范查詢字符串。在這個例子中 (a GET request), # 按字符代碼點以升序順序對參數名稱進行排序。例如,以大寫字母 F 開頭的參數名稱排在以小寫字母 b 開頭的參數名稱之前。 # 請勿對 RFC 3986 定義的任何非預留字符進行 URI 編碼,這些字符包括:A-Z、a-z、0-9、連字符 (-)、下劃線 (_)、句點 (.) 和波浪符 ( ~ )。 # 使用 %XY 對所有其他字符進行百分比編碼,其中“X”和“Y”為十六進制字符(0-9 和大寫字母 A-F)。例如,空格字符必須編碼為 %20(不像某些編碼方案那樣使用“+”),擴展 UTF-8 字符必須采用格式 %XY%ZA%BC。 canonical_querystring = request_parameters # Step 4: 添加規范標頭. # 規范標頭包括您要包含在簽名請求中的所有 HTTP 標頭的列表 # 要創建規范標頭列表,請將所有標頭名稱轉換為小寫形式并刪除前導空格和尾隨空格。將標頭值中的連續空格轉換為單個空格 # 追加小寫標頭名稱,后跟冒號 # 追加該標頭的值的逗號分隔列表。請勿對有多個值的標頭進行值排序 canonical_headers = 'host:' + host + '\n' + 'x-gsdata-date:' + gsdate # Step 5: 添加已簽名的標頭. #該值是您包含在規范標頭中的標頭列表。通過添加此標頭列表,您可以向 GSDATA 告知請求中的哪些標頭是簽名過程的一部分以及在驗證請求時 GSDATA 可以忽略哪些標頭 # host 標頭必須作為已簽名標頭包括在內。如果包括日期或 x-gsdata-date 標頭,則還必須包括在已簽名標頭列表中的標頭。 # 要創建已簽名標頭列表,請將所有標頭名稱轉換為小寫形式,按字符代碼對其進行排序,并使用分號來分隔這些標頭名稱。 signed_headers = 'host;x-gsdata-date' # Step 6: 使用 SHA256 等哈希 (摘要) 函數以基于 HTTP 或 HTTPS 請求正文中的負載創建哈希值. # 如果負載為空,則使用空字符串作為哈希函數的輸入. payload_hash = hashlib.sha256(''.encode("utf8")).hexdigest() # Step 7: 要構建完整的規范請求,請將來自每個步驟的所有組成部分組合為單個字符串 canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers +'\n'+ payload_hash print 'canonical_request: %s\n' % canonical_request # ************* TASK 2: 創建要簽名的字符串************* # 以算法名稱開頭,后跟換行符。該值是您用于計算規范請求摘要的哈希[SHA256] algorithm = 'GSDATA-HMAC-SHA256' string_to_sign = algorithm + '\n' + gsdate + '\n' + hashlib.sha256(canonical_request.encode("utf8")).hexdigest() # ************* TASK 3: 計算簽名 ************* # 使用上面定義的函數創建簽名密鑰. signing_key = getSignatureKey(secret_key, datestamp, service) # Sign the string_to_sign using the signing_key signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest() # ************* TASK 4: 向請求添加簽名信息 ************* # The signing information can be either in a query string value or in # a header named Authorization. This code shows how to use a header. # Create authorization header and add to request headers authorization_header = algorithm + ' ' + 'AppKey=' + app_id + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature # The request can include any headers, but MUST include "host", "x-gsdata-date", # and (for this scenario) "Authorization". "host" and "x-gsdata-date" must # be included in the canonical_headers and signed_headers, as noted # earlier. Order here is not significant. # Python note: The 'host' header is added automatically by the Python 'requests' library. headers = {'x-gsdata-date':gsdate, 'Authorization':authorization_header} # ************* SEND THE REQUEST ************* request_url = 'http://'+host+service + '?' + canonical_querystring print '\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++' print 'Request URL = ' + request_url r = requests.get(request_url, headers=headers) print '\nRESPONSE++++++++++++++++++++++++++++++++++++' print 'Response code: %d\n' % r.status_code print r.text ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看