PostmanでUber APIをテストしており、フォームデータを含むリクエストを正常に送信できます。 Node.jsとaxiosライブラリを使用してこのリクエストを翻訳しようとすると、エラーが発生します。
Postmanのリクエストは次のようになります。
私が受け取る応答は:{ "error": "invalid_client" }
Node.jsとaxiosで私がやっていることは次のとおりです。
var axios = require("axios");
const config = { headers: { 'Content-Type': 'multipart/form-data' } };
axios.post('https://login.uber.com/oauth/v2/token', {
client_id: '***',
client_secret: '***',
grant_type: 'authorization_code',
redirect_uri: 'http://localhost:8080/',
code: '***'
}, config)
.then(function(response) {
console.log(response.data)
})
.catch(function(error) {
console.log(error)
})
これを行うと、400の応答が返されます。
Postmanリクエストでフォームデータに入力したため、'multipart/form-data'
ヘッダーを追加しました。ヘッダーがなければ、同じ結果が得られます。
Postmanから得たのと同じ応答が得られると期待していますが、Node.jsスクリプトの構成変数に何か問題がありますか?
助けていただければ幸いです!
Content-Type: 'application/x-www-form-urlencoded'
を使用できる場合があります。 https://login.microsoftonline.com
で同様の問題が発生しましたが、着信application/json
を処理できませんでした。
var axios = require("axios");
axios({
url: 'https://login.uber.com/oauth/v2/token',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: `client_id=${encodeURIComponent('**')}&client_secret=${encodeURIComponent('**')}&grant_type=authorization_code&redirect_uri=${encodeURIComponent('http://localhost:8080/')}&code=${encodeURIComponent('**')}`
})
.then(function(response) {
console.log(response.data)
})
.catch(function(error) {
console.log(error)
})
関数を使用して、formUrlEncodedへの変換を処理することもできます。
const formUrlEncoded = x =>
Object.keys(x).reduce((p, c) => p + `&${c}=${encodeURIComponent(x[c])}`, '')
var axios = require("axios");
axios({
url: 'https://login.uber.com/oauth/v2/token',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: formUrlEncoded({
client_id: '***',
client_secret: '***',
grant_type: 'authorization_code',
redirect_uri: 'http://localhost:8080/',
code: '***'
})
})
.then(function(response) {
console.log(response.data)
})
.catch(function(error) {
console.log(error)
})
2017年6月10日に関しては、axios
ライブラリはNode.jsでのフォームデータのポストをサポートしていません。 GitHubの問題- https://github.com/mzabriskie/axios/issues/789
同様の問題があり、request
ライブラリに切り替えることにしました。
エラーから、client_idまたはclient_secretが間違っているようです。デバッグを有効にし、生の要求/応答を共有します(資格情報をフィルタリングした後)。
それは本当ではない! nodejsを使用して、axiosでデータを投稿できます。やった問題は、サーバー側でPHPを使用する場合、注意が必要な落とし穴があります。AxiosはJSON形式(Content-Type:application/json)PHPの標準でデータをポストしますこのコンテンツタイプが使用されると、$ _ POST配列は設定されません。したがって、常に空になります。jsonリクエストを介して送信される投稿パラメーターを取得するには、file_get_contents( " http:// php://input ")。
サーバー側の単純なPHP=スクリプトは次のようになります。
if($_SERVER['REQUEST_METHOD']==='POST' && empty($_POST)) {
$_POST = json_decode(file_get_contents('http://php://input'));
}
このメソッドを使用すると、formData依存関係を回避できます。あなたは[〜#〜] can [〜#〜]node.jsから直接データを投稿できます。