Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Problem with open-uri
Jonathan Nichols
6/3/2007 7:16:00 PM
Hello,
I'm trying to use open-uri on yahoo mail's login page. If I do the
following:
#!/usr/bin/env ruby
require 'open-uri'
require 'uri'
f = open("
http://mail.yahoo...
)
--------
I get the following error:
/usr/lib/ruby/1.8/open-uri.rb:174:in `open_loop': redirection forbidden:
http://mail....
->
https://login.yahoo.com/config/login_verify2?&a...
(RuntimeError)
from /usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
from /usr/lib/ruby/1.8/open-uri.rb:528:in `open'
from /usr/lib/ruby/1.8/open-uri.rb:30:in `open'
from ./readForms.rb:11
-------
I've tried to use mechanize instead, but I can't seem to figure out
how to emulate the base_uri functionality in open-uri. Any ideas?
Regards,
jon
--
Posted via
http://www.ruby-...
.
3 Answers
Todd Benson
6/3/2007 7:25:00 PM
0
On 6/3/07, Jonathan Nichols <jnichols@alumni.princeton.edu> wrote:
> Hello,
>
> I'm trying to use open-uri on yahoo mail's login page. If I do the
> following:
>
> #!/usr/bin/env ruby
>
> require 'open-uri'
> require 'uri'
>
> f = open("
http://mail.yahoo...
)
>
> --------
>
> I get the following error:
>
> /usr/lib/ruby/1.8/open-uri.rb:174:in `open_loop': redirection forbidden:
>
http://mail....
->
>
https://login.yahoo.com/config/login_verify2?&a...
(RuntimeError)
> from /usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
> from /usr/lib/ruby/1.8/open-uri.rb:528:in `open'
> from /usr/lib/ruby/1.8/open-uri.rb:30:in `open'
> from ./readForms.rb:11
>
> -------
>
> I've tried to use mechanize instead, but I can't seem to figure out
> how to emulate the base_uri functionality in open-uri. Any ideas?
>
> Regards,
>
> jon
You're being redirected. Try the redirect url (and you can leave the
?&.src=ym off depending on what you want to do)
require 'open-uri'
document = open( "
https://login.yahoo.com/config/login_ver...
).read
Jonathan Nichols
6/3/2007 8:35:00 PM
0
Hi Todd,
Thanks for the quick response. Unfortunately, I need to have the
ability to take a simple uri and follow the redirections. open-uri
works for some uris, but not for yahoo for some reason. If you do
open("
https://mail.google...
), it will follow the redirects and
successfully download the html at the redirected uri, which is
https://www.google.com/accounts/Se...
. this looks like a bug in
open-uri to me, as mechanize (and firefox) is able to follow the
redirects for yahoo.
I can't find a way to report bugs for open-uri. Anybody know how to
do this?
Regards,
jon
Todd Benson wrote:
> On 6/3/07, Jonathan Nichols <jnichols@alumni.princeton.edu> wrote:
>> f = open("
http://mail.yahoo...
)
>> from /usr/lib/ruby/1.8/open-uri.rb:30:in `open'
>> from ./readForms.rb:11
>>
>> -------
>>
>> I've tried to use mechanize instead, but I can't seem to figure out
>> how to emulate the base_uri functionality in open-uri. Any ideas?
>>
>> Regards,
>>
>> jon
>
> You're being redirected. Try the redirect url (and you can leave the
> ?&.src=ym off depending on what you want to do)
>
> require 'open-uri'
> document = open( "
https://login.yahoo.com/config/login_ver...
).read
--
Posted via
http://www.ruby-...
.
Jonathan Nichols
6/5/2007 8:36:00 AM
0
I think I figured this out. The following is the code that generates
the exception:
----
def OpenURI.redirectable?(uri1, uri2) # :nodoc:
# This test is intended to forbid a redirection from http://... to
# file:///etc/passwd.
# However this is ad hoc. It should be extensible/configurable.
uri1.scheme.downcase == uri2.scheme.downcase ||
(/\A(?:http|ftp)\z/i =~ uri1.scheme && /\A(?:http|ftp)\z/i =~
uri2.scheme)
end
----
This code is telling us that if there's a redirection, it will only work
if the protocols are the same (http -> http, or https -> https), or if
both the first and the second uris are either http or ftp. This logic
prohibits a redirect from http to https, which is what the yahoo mail
uri does. Changing the last line to
(/\A(?:http|ftp|https)\z/i =~ uri1.scheme &&
/\A(?:http|ftp|https)\z/i =~ uri2.scheme)
will do the trick. Seems like this fix should get incorporated into
open-uri. Anyone out there on the open-uri team listening?
-jon
Jonathan Nichols wrote:
> Hi Todd,
>
> Thanks for the quick response. Unfortunately, I need to have the
> ability to take a simple uri and follow the redirections. open-uri
> works for some uris, but not for yahoo for some reason. If you do
> open("
https://mail.google...
), it will follow the redirects and
> successfully download the html at the redirected uri, which is
>
https://www.google.com/accounts/Se...
. this looks like a bug in
> open-uri to me, as mechanize (and firefox) is able to follow the
> redirects for yahoo.
>
> I can't find a way to report bugs for open-uri. Anybody know how to
> do this?
>
> Regards,
>
> jon
>
>
> Todd Benson wrote:
>> On 6/3/07, Jonathan Nichols <jnichols@alumni.princeton.edu> wrote:
>>> f = open("
http://mail.yahoo...
)
>>> from /usr/lib/ruby/1.8/open-uri.rb:30:in `open'
>>> from ./readForms.rb:11
>>>
>>> -------
>>>
>>> I've tried to use mechanize instead, but I can't seem to figure out
>>> how to emulate the base_uri functionality in open-uri. Any ideas?
>>>
>>> Regards,
>>>
>>> jon
>>
>> You're being redirected. Try the redirect url (and you can leave the
>> ?&.src=ym off depending on what you want to do)
>>
>> require 'open-uri'
>> document = open( "
https://login.yahoo.com/config/login_ver...
).read
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Problem with open-uri
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password