簡體   English   中英

Ruby Net :: HTTP 400錯誤請求

[英]Ruby Net::HTTP 400 Bad Request

我正在嘗試使用http://www.nasdaqomxnordic.com/shares/listed-companies/nordic-large-cap抓取其數據。 這是我的代碼,使用Net :: HTTP發送獲取請求:

require 'net/http'
require 'uri'

def get_stocks()
    uri = URI.parse('http://www.nasdaqomxnordic.com/aktier/listed-companies/stockholm')
    response = Net::HTTP.get_response(uri)
    puts response
 end

get_stocks()

我測試過的其他站點效果很好,並以200:OK響應,但http://www.nasdaqomxnordic.com/shares/listed-companies/nordic-large-cap返回#<Net::HTTPBadRequest:0x00007ffe8f84ec30>和我不明白為什么。

對於進一步的上下文, response.body返回:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=utf-8"/>
<title>400 Bad Request</title></head>
<body>
    <H2>400 Bad Request</H2>
    <p>The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.</p>
    <p>This page can't be displayed.<br/>The incident ID is: 10039581164792379.</p>
    <p>If you would like assistance, please contact the Support for additional information.<br></p>
</body>
</html>

我怎樣做才能得到200:OK

我認為您需要設置請求的User-Agent屬性。 以下代碼有效。

require 'net/http'
require 'uri'

def get_stocks()
  uri = URI.parse("http://www.nasdaqomxnordic.com/shares/listed-companies/nordic-large-cap")
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)
  user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36'
  request.initialize_http_header({"User-Agent" => user_agent})

  response = http.request(request)
  puts response.inspect 
 end

get_stocks() # #<Net::HTTPOK 200 OK readbody=true>

您可以使用response.body獲取響應正文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM