5

I have a problem in HTTP Authentication. I couldn't get the content of this url because it need http auth.

Code:

<?php

$url = "http://www.abcdefg.com/12345/";

$username = 'username';
$password = 'password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$out = curl_exec($ch);

print "error:" . curl_error($ch) . "<br />";
print "output:" . $out . "<br /><br />";

curl_close($ch);

?>

The Problem is: Instead of show the real content, it shows "302 Found, The document has moved here."

I've tried "http://username:[email protected]/12345/", doesn't work.

When accessing this url(1), a popup window ask for username and password. but the popup window is from another url(2)(a sso authentication server). if pass the authentication. then it gets back to url(1) again. at this time, I can access the content of this url(1).

I use firebug get the following message by accessing the url directly from browser:

Step 1

URL: GET http://www.abcdefg.com/12345/
Status: 302 Found
Protocol: http

Step 2

URL: GET https://www.ssoauth.com/obrareq.cgi?wh=xxx wu=xxx wo=xxx rh=http://www.abcdefg.com ru=/12345/
Status: 302 Redirect
Protocol: https

Step 3

URL: GET http://www.abcdefg.com/obrar.cgi?cookie=xxxxxxxxxxxxxxx
Status: 302 Found
Protocol: http

Step 4

URL: GET http://www.abcdefg.com/12345/
Status: 200 OK
Protocol: http

Then display the content…

Is this something to do with the cookie? How can I use php curl to read the content?

1 Answer 1

5

You have to set:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

This will make cURL obey the 302 and generate an additional request.

Sign up to request clarification or add additional context in comments.

4 Comments

I just added curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) but it shows "parse error in line 32" line 32 is: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); Do I need to add sth related to https? cuz in Step 2, it use https with port 443.
I forgot the ; at the end of the line!
there is an error from curl_error($ch): Maximum (20) redirects followed -----still no output.
woow!! it finally worked after adding: curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookies.txt'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.