bioperl-live
bioperl-live copied to clipboard
Bio::DB:Taxonomy won't connect to NCBI
When I use Bio:DB:Taxonomy I get the following error:
MSG: Can't query website: 500 Can't connect to eutils.ncbi.nlm.nih.gov:443 STACK: Error::throw STACK: Bio::Root::Root::throw /usr/share/perl5/Bio/Root/Root.pm:449 STACK: Bio::DB::Taxonomy::entrez::_run_query /usr/share/perl5/Bio/DB/Taxonomy/entrez.pm:658 STACK: Bio::DB::Taxonomy::entrez::get_taxon /usr/share/perl5/Bio/DB/Taxonomy/entrez.pm:267
NCBIs response:
have upgraded our web front ends to comply with current security protocols. Fundamentally, all software must be using TLS v1.2 to gain access. According to this thread, https://stackoverflow.com/questions/51110181/perl-lwp-why-does-iosocketssl-use-tls-1-0-while-netssl-uses-tls-1-2, changing the following in your Perl code should work:
replace "use IO::Socket::SSL;" with "use Net::SSL;"
We don't directly use this module (IO::Socket::SSL) so I am unclear where this would addressed. I think based on the inheritance this is probably best addressed in the module Bio::DB::WebDBSeqI because it uses LWP::UserAgent - I think there is some information here https://stackoverflow.com/questions/51072472/lwpuseragent-change-ssl-implementation.
We can likely add this in somewhere in your perl script BEFORE you have indicated use Bio::DB::Taxonomy
BEGIN {
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
}
But to test can you set this ENV variable before you run your script? eg in your shell on cmdline or in HPC submission script (assuming bash/sh):
export PERL_NET_HTTPS_SSL_SOCKET_CLASS="Net::SSL"
perl your_ncbi_retrieval_script.pl