【问题标题】:Twitter 1.1 user_timline with Bearer Authorization returns 400 in node.js具有承载授权的 Twitter 1.1 user_timline 在 node.js 中返回 400
【发布时间】:2013-07-10 23:38:05
【问题描述】:

我有一个不记名令牌,并尝试使用以下代码从代理后面获取用户的时间线。

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:当我离开授权标头时,即使我预计授权失败消息,我仍然会得到 400。需要什么特殊的编码吗?

EDIT3:现在状态码是 401。有异味 :(

【问题讨论】:

    标签: node.js twitter proxy


    【解决方案1】:

    诀窍在于:您必须使用 CONNECT 在 HTTP 请求上建立 HTTPS 连接以通过代理。最初的方式是错误的。

    var http = require('http');
    var https = require('https');
    
    var connectReq = http.request({ // establishing a tunnel
      host: 'localhost',
      port: 3128,
      method: 'CONNECT',
      path: 'github.com:443',
    }).on('connect', function(res, socket, head) {
      // should check res.statusCode here
      var req = https.get({
        host: 'github.com',
        socket: socket, // using a tunnel
        agent: false    // cannot use a default agent
      }, function(res) {
        res.setEncoding('utf8');
        res.on('data', console.log);
      });
    }).end();
    

    有关详细信息,请参阅以下 node.js 错误/问题:HTTPS request not working with proxy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2013-04-02
      • 2013-01-25
      • 2013-06-14
      • 2016-03-03
      • 2016-12-24
      • 2016-10-23
      相关资源
      最近更新 更多