Ruby HTTP.get 与 open-url 的结果为什么不一样?

yakczh · 2014年06月13日 · 最后由 2033391318 回复于 2014年06月13日 · 3591 次阅读

require 'net/http' require 'uri' url_src='http://fs.fangjia.com/trend/quarterData?defaultCityName=%E4%BD%9B%E5%B1%B1' url = URI.parse(url_src) httpcall = Net::HTTP.new(url.host, url.port) resp, data = httpcall.get(url.path) #puts resp.code puts data

这个打打印为空

但是用 open-url puts open(url_src).read 就能打印出内容

上面的代码哪里出错了?

require 'net/http'
puts Net::HTTP.get(URI 'http://fs.fangjia.com/trend/quarterData?defaultCityName=%E4%BD%9B%E5%B1%B1')

我是参照 http://stackoverflow.com/questions/587559/how-to-make-an-http-get-with-modified-headers 这上面的例子,要传 header 进去,Net::HTTP.get(URI url) 这个怎么样传 header ?

在查 stackoverflow 之前,是否阅读过官方文档?

4 楼 已删除

我擦,这年头居然有人提供 json api

Net::HTTP.get_response(URI(url)) 能获取到数据。。。

@pynix 都是用 JSON API 啊,有什么好奇怪的。

@2033391318 你说的是前端效果吧,那个和 ruby 无关,用 JS 的。

require 'net/http'

header = {"expires" => (Time.now + 30).to_s}
uri = URI.parse('http://fs.fangjia.com')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new('/trend/quarterData' + '?' + URI.encode_www_form({'defaultCityName' => '佛山'}), header)
puts http.request(request).body

同样的代码 请求别的网站就可以

url_src='http://www.12306.cn/'

url = URI.parse(url_src)

httpcall = Net::HTTP.new(url.host, url.port)
httpcall.get2(url.path) 
resp, data = httpcall.get(url.path) 
#puts resp.code 
puts resp.body

但是 url_src='http://fs.fangjia.com/trend/quarterData?defaultCityName=%E4%BD%9B%E5%B1%B1' 就输出 nill open(url_src).read 这样也正常

我猜是因为 http 头格式的问题

@hxtheone 试过了,编辑器有点问题,我以为语法记错了……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号