Authorizationヘッダーをcurl
から取得できますが、Node.jsのrequest
またはhttps
からは取得できません。サーバーはcurlでステータス200を返しますが、request
またはhttps
で500を返します。 request
またはhttps
からの電話は、curl
とどのように異なる場合がありますか?どのようにサーバーがそれらを別々に読んでいるのでしょうか?request.jsが失敗しました。認証ヘッダー付きのGETリクエストでCURLが成功しました
次のcURLコマンドラインから成功:
curl -H "Authorization: Bearer abc123def456" https://api.domain.com/path/to/resource
しかし、同じ要求がノードにrequest.jsで失敗し
var options = {
type: 'get',
url: "https://api.domain.com/path/to/resource",
headers: {
"Authorization": " Bearer abc123def456"
}
}
request(options, function (err, response, body) {
assert.equal(response.statusCode, 200) ; // 500 internal error
})
次のようにもauth
オプションを使用してrequest.jsで失敗します。
var options = {
type: 'get',
url: "https://api.domain.com/path/to/resource",
auth: {
"bearer": "abc123def456"
}
}
request(options, function (err, response, body) {
assert.equal(response.statusCode, 200) ; // 500 internal error
})
なし:ノードから出て砲撃した場合
var options = {
host: 'api.domain.com',
port: 443,
path: '/path/to/info',
method: 'GET',
headers: {
"Authorization": " Bearer abc123def456"
}
}
var req = https.request(options, function (res) {
res.setEncoding('utf8');
res.on('end', function() {
assert.equal(res.statusCode, 200) // 500 internal error
})
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
req.end();
しかし、カールの要求が成功します。
exec("curl -H "Authorization: Bearer abc123def456" https://api.domain.com/path/to/resource", function (error, stdout, stderr) {
var obj = JSON.parse(stdout) // successfully retrieved and parsed
});
request-debug
は、以下の情報提供します:
{ request:
{ debugId: 1,
uri: 'https://api.domain.com/path/to/resource',
method: 'GET',
headers:
{ host: 'api.domain.com',
authorization: 'Bearer abc123def456' } } }
500内部エラーは、通常、サーバー側でエラーが発生していることを意味します。 APIサーバーログを確認しましたか? 'User-Agent'ヘッダーを解析しようとしていますか? –
大きな質問です。私はサーバーにアクセスすることはできません.OAuthルートだけです。 curlや要求が 'User-Agent'ヘッダを渡すのですか? – prototype
カールは1つを渡します、あなたがそれを指定しない限り、リクエストはしないと思います。 –