Grabbing a file via auth HTTPS
February 26, 2005 9:11 AM   Subscribe

Using a PHP, Perl, or cron, how do I grab a xml page from a my TiVo that requires https authorization? I have the username and password.

Here's what the url with the username and password looks like. https://<login>:<pass>@<tivo-ip>/TiVoConnect?Command=QueryContainer&Container=/NowPlaying&Recurse=Yes

I don't have access to wget on my hosted site, and cURL didn't work for me. I keep getting bad authorization errors with it.
posted by riffola to Computers & Internet (16 answers total)
curl likes it better if you pass the username and password with the -u parameter. Try:

curl -O -u login:pass https:///TiVoConnect?Command=QueryContainer&Container=/NowPlaying&Recurse=Yes
posted by Remy at 9:21 AM on February 26, 2005

I did use curl_setopt($ch, CURLOPT_USERPWD, $passwd_string); in PHP where $passwd_string = "tivo:$mak"; and that didn't work.
posted by riffola at 9:37 AM on February 26, 2005

In fact here's the script I am trying to get to work. The original poster had the same errors and I thought I could try and fix it, but I can't seem to be able to do so.
posted by riffola at 9:39 AM on February 26, 2005

Have you tried Perl?


print (system("curl -O -u login:pass https:///TiVoConnect?Command=QueryContainer&Container=/NowPlaying&Recurse=Yes"));
posted by AlexReynolds at 10:06 AM on February 26, 2005

With perl, sorry to say but I'm mostly clueless and using what you wrote above in a .cgi file gives me redirection errors.
posted by riffola at 10:17 AM on February 26, 2005

Did you make the file executable? Did you specify the hostname and username:password?
posted by AlexReynolds at 10:29 AM on February 26, 2005

Yep, I did both, and it still didn't work.
posted by riffola at 10:34 AM on February 26, 2005

The error message says the HTTP authentication is using digest (as opposed to basic) mode. Looking at the man page for curl, it appears you may need to add a --digest option to the command line.
posted by Axaxaxas Mlö at 11:01 AM on February 26, 2005

Oh, you're using curl through PHP, so I think what you want is curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY) (the "ANY" should allow it to handle authorization methods other than digest as well).
posted by Axaxaxas Mlö at 11:17 AM on February 26, 2005

The script I am using does use curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY). I am not sure why things are not playing nice.
posted by riffola at 1:23 PM on February 26, 2005

Starting with 7.10, You have to pass the -k flag to allow curl to connect to a server without a valid certificate, which will always be the case when connecting by IP address.
posted by boaz at 5:22 PM on February 26, 2005

That's curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); in PHP, BTW. Don't know enough Perl to help you there.
posted by boaz at 5:28 PM on February 26, 2005

Actually, I finally followed the link and noticed that whoever did it did set that option. Hmmm.
posted by boaz at 5:33 PM on February 26, 2005

Firstly, does the address load in your browser? Secondly, try changing CURLAUTH_ANY to CURLAUTH_DIGEST. Then Curl will know in advance which kind to use.
posted by cillit bang at 6:00 PM on February 26, 2005

I don't have access to a Tivo, so I can't test anything but a common problem when curl fails, but everything else seems to work is the user agent. Curl by default doesn't set one at all, which can confuse browser sniffers. Also, you may want to specifically set curl to use only digest authentication, i.e CURLAUTH_DIGEST instead of CURLAUTH_ANY.
posted by boaz at 6:02 PM on February 26, 2005

Thanks! It works, all CURLAUTH_DIGEST fixed it. Thanks a lot!
posted by riffola at 7:18 PM on February 26, 2005

« Older Starting an Internet radio station/show   |   Is dentistry cheaper outside the city? Newer »
This thread is closed to new comments.