1

私はnodejsを使用してベアラートークンを取得しています。コードは次のようになります

var fs = require("fs");
var https = require("https");
var querystring = require("querystring");
var bearer = "cunsomer_key:cunsomer_secret"
var base64ed = new Buffer(bearer).toString("base64");

var options = {
    port: 443,
    hostname: "api.twitter.com",
    path: "/oauth2/token",
    method: "post",
    headers: {
        Authorization: "Basic " + base64ed,
        "Content-Type": "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
        "User-Agent": "socialginie"
    },
    key: fs.readFileSync("./testssl.key"),
    cert: fs.readFileSync("./testcert.cert"),
}

var req = https.request(options, res => {
    res.on("data", d => {
        console.log(d.toString());
    })
})
req.on("error", e => {
    console.log(e);
});
req.write(querystring.stringify({
    "grant_type": 'client_credentials'
}))
req.end();

APIからの予想される戻り値は私のベアラートークンであり、郵便配達アプリでそうしますが、ここでエラーが発生します{"errors":[{"code":170,"message":"Missing required parameter: grant_type","label":"forbidden_missing_parameter"}]}

APIサーバーが付与タイプを読み取れない理由を誰かが知っていますか

4

1 に答える 1

0

あなたの問題は単なるタイプミスです。この行で:

    "Content-Type": "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",

ヘッダー値の一部として「Content-Type」を指定しています。

この curl コマンドを使用して無効な Content-Type を送信すると、同じエラーが表示されます。

$ curl --data "grant_type=client_credentials" -H "Authorization: Basic <credentials-omitted>" -H "Content-Type:" -H "Content-Type: Content-Type: application/x-www-form-urlencoded;charset=UTF-8" https://api.twitter.com/oauth2/token
{"errors":[{"code":170,"message":"Missing required parameter: grant_type","label":"forbidden_missing_parameter"}]}

ヘッダーを修正すると、トークンを取得します。

$ curl --data "grant_type=client_credentials" -H "Authorization: Basic <credentials-omitted>" -H "Content-Type:" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" https://api.twitter.com/oauth2/token
{"token_type":"bearer","access_token":"<token-omitted>"}
于 2016-02-14T20:53:04.500 に答える