首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >request.on("response",[…])永远不会被解雇

request.on("response",[…])永远不会被解雇
EN

Stack Overflow用户
提问于 2010-12-09 21:14:05
回答 1查看 8.3K关注 0票数 7

我目前正在尝试使用NodeJS,并尝试使用Twitter-Search API。对于curl,它工作得很好-所以我的防火墙或其他什么都没有问题。然而,我在NodeJS中从来没有得到过响应。

代码语言:javascript
复制
var sys = require("sys"),
    http = require("http"),
    events = require("events");

sys.puts("Hi there… ");
var client = http.createClient(80, "search.twitter.com"),
    body = "",
    query = "foobar";

function getResults() {
  sys.puts("fetching for "+query);
  var request = client.request("GET", "/search.json?q="+query);
  request.on("response", function(data){
    /* this somehow never gets fired :( */
    sys.puts("BODY:"+ data);
  });
}

var interval = setInterval(getResults, 5000);

还有URL is also working

欢迎任何提示或解决方案!

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-09 21:21:44

You 请求不会发送。

您需要使用request.end()

注意:请求未完成。此方法仅发送请求的标头。需要调用request.end()来完成请求并检索响应。(这听起来很复杂,但它为用户提供了使用request.write()将正文流式传输到服务器的机会。)

此外,response事件的参数是response object ,而不是主体。您需要在response object上设置data事件,然后侦听end事件,以确保您获得了所有数据。

代码语言:javascript
复制
request.on('response', function (response) {
  var body = '';
  response.on('data', function (chunk) {
    body += chunk;
  });
  response.on('end', function () {
    console.log('BODY: ' + body);
  });
});
request.end(); // start the request

请参阅:http://nodejs.org/api/http.html#http_class_http_clientrequest

更多提示

你可能想要使用querystring.escape对你的搜索进行

  1. 编码,你也需要设置querystring.escape头,否则Twitter会返回一个404

修复代码:

代码语言:javascript
复制
var querystring = require('querystring');
...
var request = client.request("GET", "/search.json?q=" + querystring.escape(query), {'Host': 'search.twitter.com'});
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4398585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档