2016-07-04 5 views
0

を読み取ることができない私は、InstagramのAPIにPOSTリクエストを送信するためにAxiosを使用しています:POST APIへのオブジェクトが、APIはそれを

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 
axios.post('https://api.instagram.com/oauth/access_token', { 
    client_id: 'zzz', 
    client_secret: 'zzz', 
    grant_type: 'authorization_code', 
    redirect_uri: 'http://localhost:8080/oauth2', 
    code: 'zzz', 
    }).then(function(res) { 
    console.log("response ", res); 
    }) 
    .catch(function(err) { 
    console.log("err ", err); 
    }); 

これは、InstagramのAPIのドキュメント(https://www.instagram.com/developer/authentication/)で与えられた例を以下の:

// curl -F 'client_id=CLIENT_ID' \ 
    // -F 'client_secret=CLIENT_SECRET' \ 
    // -F 'grant_type=authorization_code' \ 
    // -F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \ 
    // -F 'code=CODE' \ 
    // https://api.instagram.com/oauth/access_token 

ただし、次のエラーが返されます。

data: { 
    code: 400, 
    error_type: 'OAuthException', 
    error_message: 'You must provide a client_id' 
} 

私はクロームポストマンを使用して、私は何の問題もありません。私は認証トークンを受け取ります。だから明らかにAPIは私が送信しているものを読んでいないのですが、私は理由を理解できません。私は私のヘッダーを設定しました:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use(function(req, res, next) { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, accept, authorization'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    next(); 
}); 

も私もhttp://jsonplaceholder.typicode.com/に同じPOSTを行い、予想通り、私は正しい応答を受け取ります。

私は間違っていますか?

EDIT:

私はちょうど私がクロームポストマンを使用する場合、それだけx-www-form-urlencodedで設定して働くことに気づきました。私はJSONと他の多くの方法でそれを送信しようとしましたが、私は以下に述べるのと同じエラーを受け取ります。

+0

** application/x-www-form-urlencoded **の代わりに** application/json **を使用しますか? – TommyLike

+0

それを試してもうまくいかなかった。 – jro

+0

アプリケーション/ x-www-form-urlencodedは、フォームデータを送信するために使用されます。 Instagram APIを簡単に見て、クエリ文字列を送信したい - 実際のURLにパラメータを追加する。 https://api.instagram.com/oauth/access_token?client_id = zzz&client_secret = zzz ... – razakj

答えて

0

あなたはNode.jsのアプリケーションからaxios経由application/x-www-form-urlencoded要求をするために、次のコードを使用することができます。

var querystring = require('querystring'); 

axios.post('http://something.com/foo', querystring.stringify({ 
    'bar': 123 
}); 

あなたがContent-Typeヘッダーを設定する必要はありませんのでご注意ください。自動的にapplication/x-www-form-urlencodedに設定されます。

関連する問題