【问题标题】:Ruby Net:Http get request gives different response than with BrowserRuby Net:Http 获取请求给出的响应与浏览器不同
【发布时间】:2020-01-01 20:04:16
【问题描述】:

我正在尝试使用 Net::HTTP 从 API 服务器获取数据。

puts "#{uri}".green
response = Net::HTTP.new('glassdoor.com').start { |http|
  # always proxy via your.proxy.addr:8080
  response =  http.get(uri,  {'Accept' => 'application/json'})
  puts "Res val: #{response.body}".blue
}

我从控制台得到uri 并粘贴到浏览器中,我收到了 JSON 响应。

但是使用 Ruby Net::HTTP get 我会收到一些安全消息:

为什么不一样?浏览器和 Ruby 脚本位于同一个公共 IP 后面。

【问题讨论】:

    标签: ruby request net-http


    【解决方案1】:

    您被检测为爬虫(顺便说一句,正确)。请注意,这些请求(来自浏览器和脚本)并不完全相同。浏览器会发送一些标头,例如接受的语言、用户代理等。您可以使用浏览器中的 Web 检查器工具查看它。另一方面,在您的脚本中,您只设置了 Accept 标头(以及 JSON,它本身就很可疑,因为浏览器永远不会这样做)。而且您不发送任何用户代理。很容易看出这是一个自动请求,而不是来自浏览器的自然流量。

    【讨论】:

    • 我改变了请求头一点点。仍然收到警告:accept-encoding: gzip accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2011-09-07
    • 2018-12-11
    相关资源
    最近更新 更多