ruby - open-uri 的更新是否会改变您调用用户代理的方式?
问题描述
在“Instant Nokogiri”一书中和Packt Hub Nokogiri 页面上 ,它有一个用户代理应用程序,用于在爬取纽约时报网站以获取头条新闻时欺骗浏览器。
我正在阅读这本书,但代码有点过时,但我更新了它。
我的代码版本是:
require 'open-uri'
require 'nokogiri'
require 'sinatra'
browser = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4)
AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1'
doc = Nokogiri::HTML(open ('http://nytimes.com', browser))
nyt_headline = doc.at_css('h2 span').content
nyt_url = "http://nytimes.com" + doc.at_css('.css-16ugw5f a')[:href]
html = "<h1>Nokogiri News Service</h1>"
html += "<h2>Top Story: <a href=\"#{nyt_url}\">#{nyt_headline}</a></h2>"
get '/' do
html
end
我通过 Mac OS 上的终端会话运行它并收到此错误:
invalid access mode Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) (ArgumentError)
AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1 (URI::HTTP resource is read only.)
我不相信我在尝试“写作”。不知道为什么“只读”错误会阻止它运行。在我添加用户代理信息之前它正在工作。
解决方案
请参阅 OpenURI 的open
文档:
URI.open("http://www.ruby-lang.org/en/",
"User-Agent" => "Ruby/#{RUBY_VERSION}",
"From" => "foo@bar.invalid",
"Referer" => "http://www.ruby-lang.org/") {|f|
# ...
}
选项是哈希。你正在传递一个字符串。
推荐阅读
- tpm - 为什么 AIK blob 是 281 字节?
- google-cloud-storage - Cloud Pub/Sub 到 GCS,按元素写入(数据流管道)
- javascript - 音频/视频 DOM 错误事件在 Chrome/Firefox 中不起作用
- sql - 多标准案例陈述
- php - 在管理面板中打开购物车 3 '/add' 路径
- javascript - VK (vkontakte) API 错误:尝试发布到墙上时访问被拒绝
- twilio - 如何访问 TwiML 箱?
- firebase - Firebase如何更新子值
- graphviz - 无法打印随机森林回归器树
- sql - 如何使用 SQL 求和?