鍍金池/ 問(wèn)答/Python  網(wǎng)絡(luò)安全/ 知曉云開發(fā)api 如何用python進(jìn)行oauth2 認(rèn)證

知曉云開發(fā)api 如何用python進(jìn)行oauth2 認(rèn)證

希望用python requests操作知曉云的開放api,但是總是失敗,求大神解惑。

這是他們的js示例:

https://doc.minapp.com/open-a...

  var request = require('request');

  // 獲取 code
  var opt = {
    uri: 'https://cloud.minapp.com/api/oauth2/hydrogen/openapi/authorize/',
    method: 'POST',
    json: {
      client_id: 'a4d2d62965ddb57fa4xx',
      client_secret: 'e5802b40135baab9b4e84e35bed058a264c37dxx'
    },
    jar: true,                // 允許記住 cookie 
    followAllRedirects: true,     // 允許重定向
  }

  request(opt, function(err, res, body) {
      getToken(body.code)  // 回調(diào)調(diào)用 getToken 函數(shù)
  })

  // 獲取 token
  function getToken(code) {
    var opt = {
      uri: 'https://cloud.minapp.com/api/oauth2/access_token/',
      method: 'POST',
      formData: {   // 指定 data 以 "Content-Type": "multipart/form-data" 傳送
        client_id: 'a4d2d62965ddb57fa4xx',
        client_secret: 'e5802b40135baab9b4e84e35bed058a264c37dxx',
        grant_type: 'authorization_code',
        code,
      }
    }

    request(opt, function(err, res, body) {
      let token = JSON.parse(body).access_token
    })
  }

這是我的python代碼:

import requests
import json

client_id = '謝謝謝謝'
client_secret = '非常感謝'
r = requests.post('https://cloud.minapp.com/api/oauth2/hydrogen/openapi/authorize/', json={"client_id": client_id, "client_secret": client_secret})
code = json.loads(r.content)["code"]
print code
#code可以正常獲取

headers = {'Content-Type': 'multipart/form-data'}
payload = {"client_id":client_id,'client_secret':client_secret, 'grant_type' : 'authorization_code', 'code' : code}
r = requests.post("https://cloud.minapp.com/api/oauth2/access_token/", headers=headers, data=payload)
print r.content

不知道為啥總是返回400

回答
編輯回答
艷骨

400是客戶端錯(cuò)誤,bad request,估計(jì)和cookie有關(guān)。

2018年1月31日 17:10
編輯回答
北城荒

您好,您這個(gè)問(wèn)題解決了嘛?我最近也想弄弄知曉云這個(gè)open api 沒想到第一步就卡住了。。。。。求方法

2018年8月23日 05:00