ベアラー トークンがあり、次のコードを使用してプロキシの背後からユーザーのタイムラインを取得しようとしています。
var parsedUrl = url.parse( 'https://api.twitter.com/1.1/statuses/user_timeline.json:443/?count=2&screen_name=twitterapi', true, true );
var options = {
'host': parsedUrl.host,
'path': parsedUrl.path,
'method': 'GET',
'headers': {
'Host': parsedUrl.host,
'Authorization': 'Bearer ' + settings.accessToken
}
};
var adapter = https;
if(settings.proxy)
{
options.host = settings.proxy;
options.port = settings.proxyPort;
options.path = parsedUrl.path;
options.headers['Proxy-Connection'] = 'Keep-Alive';
adapter = http;
}
var body = '';
var req = adapter.request(options, function(res) {
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
try
{
var result = JSON.parse( body );
}
catch(ex)
{
//...
}
});
});
req.end();
このリクエストは、本文やエラー メッセージなしで常に 400 を返します。cUrl でアクセスを試すと、魅力的に機能します。同じ方法でベアラー トークンを取得します。Twitter が 400 で応答するのはなぜですか?
curl --get 'https://api.twitter.com/1.1/statuses/user_timeline.json' --data 'count=2&screen_name=twitterapi' --header 'Authorization: Bearer <token>' --verbose --proxy http://proxy.example.com:8080
cUrl の違いは何ですか?
編集: ステータス コードは 404 ではなく 400 です! ごめん。
EDIT2: Authorization ヘッダーを省略しても、認証に失敗したというメッセージが表示されるはずですが、400 が返されます。特別なエンコンディングは必要ですか?
EDIT3:ステータスコードは401になりました。何か臭いが続きます:(