request.on(“response”,)永远不会被解雇
我目前正忙于使用NodeJS并尝试使用Twitter-Search API。 curl
它工作正常 – 所以我的防火墙或任何没有错。 然而,我从来没有在NodeJS中得到回应。
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也正在工作 。
任何提示或解决scheme,欢迎!
提前致谢。
你永远不会发送请求。
你需要使用request.end()
注意:请求不完整。 此方法只发送请求的标题。 需要调用request.end()来完成请求并检索响应。 (这听起来很复杂,但它提供了一个机会让用户通过request.write()将一个主体stream式传输到服务器。)
另外response
事件的参数是response object
不是主体。 您需要在response object
上设置data
事件,然后监听end
事件以确保获得所有数据。
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
来urlencode你的search参数 - 你还需要设置
Host
头,否则Twitter将返回一个404
固定代码:
var querystring = require('querystring'); ... var request = client.request("GET", "/search.json?q=" + querystring.escape(query), {'Host': 'search.twitter.com'});