How to handle ssl / force ssl_version when reading documents with Nokogiri?
up vote
0
down vote
favorite
I have some code that loads a web document using nokogiri:
require 'nokogiri'
require 'open-uri'
require 'openssl'
require 'net/https'
define_method (:loadWebDoc)
#process some urls with threads...
It's always worked well, until I started using it in threads. My script calls loadWebDoc
many times successfully, but after about 30 seconds of processing documents, I get an error like this:
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A (OpenSSL::SSL::SSLError)
Here is a similar issue on stack which suggests to use TLSv1, but it's using the stock http and not Nokogiri.
I've tried several variations of something like:file = open(url, :ssl_version => OpenSSL::SSL::SSLContext::TLSv1)
but this just gives me errors likeuninitialized constant OpenSSL::SSL::SSLContext::TLSv1 (NameError)
How can I force Nokogiri to do the same thing? It looks like I need to configure the ssl version and cipher(s) but I'm not sure how with Nokogiri and I'm likely using the wrong constant.
ruby ssl nokogiri
add a comment |
up vote
0
down vote
favorite
I have some code that loads a web document using nokogiri:
require 'nokogiri'
require 'open-uri'
require 'openssl'
require 'net/https'
define_method (:loadWebDoc)
#process some urls with threads...
It's always worked well, until I started using it in threads. My script calls loadWebDoc
many times successfully, but after about 30 seconds of processing documents, I get an error like this:
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A (OpenSSL::SSL::SSLError)
Here is a similar issue on stack which suggests to use TLSv1, but it's using the stock http and not Nokogiri.
I've tried several variations of something like:file = open(url, :ssl_version => OpenSSL::SSL::SSLContext::TLSv1)
but this just gives me errors likeuninitialized constant OpenSSL::SSL::SSLContext::TLSv1 (NameError)
How can I force Nokogiri to do the same thing? It looks like I need to configure the ssl version and cipher(s) but I'm not sure how with Nokogiri and I'm likely using the wrong constant.
ruby ssl nokogiri
1
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have some code that loads a web document using nokogiri:
require 'nokogiri'
require 'open-uri'
require 'openssl'
require 'net/https'
define_method (:loadWebDoc)
#process some urls with threads...
It's always worked well, until I started using it in threads. My script calls loadWebDoc
many times successfully, but after about 30 seconds of processing documents, I get an error like this:
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A (OpenSSL::SSL::SSLError)
Here is a similar issue on stack which suggests to use TLSv1, but it's using the stock http and not Nokogiri.
I've tried several variations of something like:file = open(url, :ssl_version => OpenSSL::SSL::SSLContext::TLSv1)
but this just gives me errors likeuninitialized constant OpenSSL::SSL::SSLContext::TLSv1 (NameError)
How can I force Nokogiri to do the same thing? It looks like I need to configure the ssl version and cipher(s) but I'm not sure how with Nokogiri and I'm likely using the wrong constant.
ruby ssl nokogiri
I have some code that loads a web document using nokogiri:
require 'nokogiri'
require 'open-uri'
require 'openssl'
require 'net/https'
define_method (:loadWebDoc)
#process some urls with threads...
It's always worked well, until I started using it in threads. My script calls loadWebDoc
many times successfully, but after about 30 seconds of processing documents, I get an error like this:
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A (OpenSSL::SSL::SSLError)
Here is a similar issue on stack which suggests to use TLSv1, but it's using the stock http and not Nokogiri.
I've tried several variations of something like:file = open(url, :ssl_version => OpenSSL::SSL::SSLContext::TLSv1)
but this just gives me errors likeuninitialized constant OpenSSL::SSL::SSLContext::TLSv1 (NameError)
How can I force Nokogiri to do the same thing? It looks like I need to configure the ssl version and cipher(s) but I'm not sure how with Nokogiri and I'm likely using the wrong constant.
ruby ssl nokogiri
ruby ssl nokogiri
asked 22 hours ago
kraftydevil
2,47852944
2,47852944
1
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago
add a comment |
1
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago
1
1
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
Looks like the error 'connect_nonblock' is raised coz the server can't handle the many connections, especially in the case of threads. Try to add the delay between attempts
open(url, open_timeout: 100)
https://ruby-doc.org/stdlib-2.4.0/libdoc/socket/rdoc/Socket.html#method-i-connect_nonblock
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
Looks like the error 'connect_nonblock' is raised coz the server can't handle the many connections, especially in the case of threads. Try to add the delay between attempts
open(url, open_timeout: 100)
https://ruby-doc.org/stdlib-2.4.0/libdoc/socket/rdoc/Socket.html#method-i-connect_nonblock
add a comment |
up vote
1
down vote
Looks like the error 'connect_nonblock' is raised coz the server can't handle the many connections, especially in the case of threads. Try to add the delay between attempts
open(url, open_timeout: 100)
https://ruby-doc.org/stdlib-2.4.0/libdoc/socket/rdoc/Socket.html#method-i-connect_nonblock
add a comment |
up vote
1
down vote
up vote
1
down vote
Looks like the error 'connect_nonblock' is raised coz the server can't handle the many connections, especially in the case of threads. Try to add the delay between attempts
open(url, open_timeout: 100)
https://ruby-doc.org/stdlib-2.4.0/libdoc/socket/rdoc/Socket.html#method-i-connect_nonblock
Looks like the error 'connect_nonblock' is raised coz the server can't handle the many connections, especially in the case of threads. Try to add the delay between attempts
open(url, open_timeout: 100)
https://ruby-doc.org/stdlib-2.4.0/libdoc/socket/rdoc/Socket.html#method-i-connect_nonblock
edited 18 hours ago
answered 18 hours ago
Alexey Strizhak
595
595
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53236142%2fhow-to-handle-ssl-force-ssl-version-when-reading-documents-with-nokogiri%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
1
This issue has nothing to do with Nokogiri. Try using rest-client or mechanize and you probably want to set some headers.
– pguardiario
20 hours ago
ok so not Nokogiri - do you have some equivalent code that should prevent this connect error?
– kraftydevil
17 hours ago
Just catch those errors and retry. And maybe use fewer threads.
– pguardiario
3 hours ago