当前位置: 首页 > 知识库问答 >
问题:

机械化获取“Errno::ECONNRESET:通过对等方重置连接-SSL\u connect”

汤飞
2023-03-14

我无法让Mechanize加载一个以前正常工作的页面——它确实失败了,出现了Errno:ECONNRESET:connectionresetbypeer-SSL\u connect消息。关于我应该尝试什么或应该查看哪些细节,有什么建议吗?(请参阅下面的“我尝试了什么…”

从一个相关的S. O.帖子中得到了一个提示,我试着用网络::HTTP直接访问这个网站。当我设置http.ssl_version=: TLSv1时,我得到的是重定向,而不是错误(因为它应该是)。所以我的问题变成了:如何从机械化中配置Net::HTTP的基础ssl_version参数?

谢谢...

$ rails console
>> a = Mechanize.new
=> #<Mechanize:0x007fd26789b8e0 ...>
>> p = a.get("http://sce.com")
# (...after a long pause...)
Errno::ECONNRESET: Connection reset by peer - SSL_connect
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from /sandbox/usr/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:857:in `start'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.9/lib/net/http/persistent.rb:691:in `start'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.9/lib/net/http/persistent.rb:631:in `connection_for'
    ...
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:257:in `fetch'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:974:in `response_redirect'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:298:in `fetch'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/mechanize-2.7.2/lib/mechanize.rb:432:in `get'
from (irb):3
$ rake about
About your application's environment
Ruby version              2.0.0 (x86_64-darwin12.4.0)
RubyGems version          2.1.9
Rack version              1.5
Rails version             4.0.0
JavaScript Runtime        JavaScriptCore
Active Record version     4.0.0
Action Pack version       4.0.0
Action Mailer version     4.0.0
Active Support version    4.0.0
Middleware                ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd423c50e0>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, Rack::Head, Rack::ConditionalGet, Rack::ETag
Application root          /Users/me/MyProject
Environment               development
Database adapter          postgresql
Database schema version   20131017201057

$ openssl version
OpenSSL 1.0.1e 11 Feb 2013

$ system_profiler -detailLevel mini SPSoftwareDataType

System Software Overview:

  System Version: OS X 10.8.5 (12F45)
  Kernel Version: Darwin 12.5.0
  Time since boot: 8 days 7:40
  • 我在Firefox web浏览器中尝试了相同的URL。它起作用了
  • 我已经明确地设置了Mechanizerequest\u头文件,以完全模仿Firefox浏览器。没有变化
  • 我已经更新了我的ssl/cert.pem文件(第二次),如本文所述。没有变化
  • 我尝试过不同的网站:www.pge。com和www.sdge。com。两者都有效。www.sce有些不同。com网站

下面是一个::HTTP工作的示例:

$ irb
>> require 'net/https'
=> true
>> require 'uri'
=> false
>> uri = URI.parse("https://www.sce.com/")
=> #<URI::HTTPS:0x007facab8f6ba0 URL:https://www.sce.com/>
>> http = Net::HTTP.new(uri.host, uri.port)
=> #<Net::HTTP www.sce.com:443 open=false>
>> http.use_ssl = true
=> true
>> http.ssl_version = :TLSv1     # <= this line makes all the difference
=> :TLSv1
>> r = http.start { |agent| p agent.get(uri.path) }
=> #<Net::HTTPFound 302 Found readbody=true>
>> r.to_hash
=> {"content-language"=>["en-US"], "date"=>["Fri, 18 Oct 2013 01:00:07 GMT"], "location"=>["https://www.sce.com/wps/portal/home/!ut/p/b1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOIt3Q1cPbz8DTzdQwKNDTyNAw38gh0djQ0MzIAKIoEKDHAARwNC-sP1o8BK8Jjg55Gfm6pfkBthoOuoqAgAgIrzaA!!/dl4/d5/L2dBISEvZ0FBIS9nQSEh/"], "p3p"=>["CP=\"NON CUR OTPi OUR NOR UNI\""], "server"=>["IBM_HTTP_Server"], "transfer-encoding"=>["chunked"], "x-powered-by"=>["Servlet/3.0"], "set-cookie"=>["PD_STATEFUL_d55ece64-8d9a-11e2-84a1-0050560010d6=%2Fwps; Path=/", "session_www=740796608.47873.0000; path=/"]}

共有1个答案

狄新翰
2023-03-14

机械化邮件列表上的人善意地提供了答案:

agent = Mechanize.new do |a|
  a.ssl_version = :TLSv1
end
 类似资料:
  • 调试此程序时遇到一些问题。我总是在第一次启动我的应用程序时出现这个错误,然后间歇性地出现。有人能帮我扔掉一些调试技巧吗?我试过使用代理检查器,但没有用,我没有看到任何有用的东西。我尝试过在django设置中设置我的站点URL的建议。我尝试了使用和不使用http://以及使用和不使用端口。。。下面是一个毫无帮助的错误: 即使有了这个连接重置,这个应用程序似乎也能正常运行,但它一直让我疯狂地试图调试。

  • 问题内容: 我的许多node.js进程都因ECONNRESET错误而崩溃。这是我可以看到的输出: 有人知道如何处理吗?这不是一个非常有用的堆栈跟踪,所以我不知道它在哪里发生。我是否应该使用try / catch块包装通过http访问远程源的所有访问权限?或者,还有更好的方法? 通常,我不关心是否会发生这种情况,或者是否因此而无法完成某些任务。我关心的是,该过程应该将其忽略,然后继续执行下一个任务。

  • 我一直使用芹菜与Rabbitmq作为后端。每当我发送一个高负载(大约600-1000)的任务到Rabbitmq,我得到以下错误socket.error[Errno 104]连接重置由对等 我一直在使用的一个示例命令是: 这是我的客户。py发送一个任务,该任务在worker上执行给定的bash命令,并轮询超时秒的结果。 我还尝试使用此命令在一段时间间隔内发送负载。它仍然给出相同的错误 是什么导致了这

  • 当使用Python2.7和从API检索数据时,我得到了错误

  • 我在RabbitMQ上犯了stainger错误。我发送了一些关于MQ和Php产品的信息,但出现了一些问题。我可以在出现异常“errno=104由对等方重置连接”的一分钟后发送消息。见下文: rabbitmq-3.6的版本。1,php-7.0版本。5,php amqp库的版本-“Videlavaro/php amqplib”:“~2.7 来自rabbitmq的日志:

  • 问题内容: 我正在尝试从下面的网址中抓取数据。但是selenium有时会出错,有时会失败。 在极少数情况下,它可以正常工作, 并且在使用实际浏览器的Mac上,同一蜘蛛每次都能正常工作。因此,这与我的无关。 尝试了许多解决方案,例如在页面上等待获取选择器,隐式等待,使用selenium-requests传递正确的请求标头等,但似乎没有任何效果。 我使用的,与实现这一目标。操作系统是。 注意: 我有许