Net::HTTP.get
是Ruby标准库中用于发送HTTP GET请求的简便方法,属于net/http
模块。它提供了一种快速获取HTTP资源的方式,无需手动创建连接和处理响应。
# 可能出现的错误
Net::OpenTimeout: execution expired
Errno::ECONNREFUSED: Connection refused
原因:
# 常见错误
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
原因:
# 可能的错误
Net::HTTPBadResponse: wrong status line
Encoding::UndefinedConversionError
原因:
require 'net/http'
require 'uri'
begin
url = URI.parse('http://example.com')
response = Net::HTTP.get_response(url)
case response
when Net::HTTPSuccess
puts response.body
else
puts "Error: #{response.code} #{response.message}"
end
rescue => e
puts "Error occurred: #{e.message}"
end
require 'net/http'
require 'uri'
url = URI.parse('https://example.com')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
# 禁用证书验证(不推荐生产环境使用)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
response = http.get(url.request_uri)
http = Net::HTTP.new(url.host, url.port)
http.open_timeout = 5 # 连接超时5秒
http.read_timeout = 10 # 读取超时10秒
def safe_http_get(url_str, max_retries = 3)
retries = 0
url = URI.parse(url_str)
begin
response = Net::HTTP.start(url.host, url.port,
use_ssl: url.scheme == 'https',
open_timeout: 5,
read_timeout: 10) do |http|
http.get(url.request_uri)
end
response.is_a?(Net::HTTPSuccess) ? response : nil
rescue StandardError => e
retries += 1
retry if retries < max_retries
nil
end
end
Net::HTTP#set_debug_output
查看原始HTTP通信Net::HTTP#set_debug_output
查看原始HTTP通信http_proxy
和https_proxy
是否设置了代理curl
或wget
测试相同的URL,确认是否是Ruby特有的问题通过以上方法和技巧,应该能够解决大多数Net::HTTP.get
相关的奇怪错误。如果问题仍然存在,可能需要更具体地分析错误信息和上下文环境。
没有搜到相关的文章