63

I am having problem with PHP curl request with basic authorization.

Here is the command line curl:

curl -H "Accept: application/product+xml" "https://{id}:{api_key}@api.domain.com/products?limit=1&offset=0" 

I have tried by setting curl header in following ways but it's not working

Authorization: Basic id:api_key or Authorization: Basic {id}:{api_key} 

I get the response "authentication parameter in the request are missing or invalid" but I have used proper id and api_key which is working in command line curl (I tested)

Please help me.

4 Answers 4

170

Try the following code :

$username='ABC'; $password='XYZ'; $URL='<URL>'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$URL); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $result=curl_exec ($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code curl_close ($ch); 
Sign up to request clarification or add additional context in comments.

7 Comments

Nice one! I had curl_setopt($ch, CURLOPT_HTTPAUTH, 'CURLAUTH_BASIC'); but that wasn't working. Used your CURLAUTH_ANY and we're golden!
I also was able to remove the CURLOPT_HTTPAUTH line and have it work properly.
@JoshPinter, you were using the string 'CURLAUTH_BASIC' instead of the constant CURLAUTH_BASIC
This worked for me curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Basic ".base64_encode($this->username.":".$this->password), ]);
Shouldn't curl_getinfo() come after curl_exec()?
|
9

Can you try this,

 $ch = curl_init($url); ... curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); ... 

REF: http://php.net/manual/en/function.curl-setopt.php

2 Comments

This actually worked for me instead of curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
@HarishPrasanna, it's the same thing...
9
$headers = array( 'Authorization: Basic '. base64_encode($username.':'.$password), ); ... curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

3 Comments

When answering a six year old question with three existing answers it is important to explain what new aspect of the question your answer addresses. Code only answers can almost always be improved by adding explanation.
@JasonAller I'd tested all of them but wasn't working. There is a comment like my answer but I think this solution must be an answer.
@Danoosh your code is redundant. You manually construct the AUTH header specifying you want Basic and base64-encoding the user/pwd + instruct cURL to itself create an AUTH header using Basic auth, but didn't provide cURL any user/pwd to use, so it can't do it. Choose only 1 method - the 2nd one - why manully implement the encoding when cURL can do it for you.
1

Its Simple Way To Pass Header

function get_data($url) { $ch = curl_init(); $timeout = 5; $username = 'c4f727b9646045e58508b20ac08229e6'; // Put Username $password = ''; // Put Password curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); // Add This Line $data = curl_exec($ch); curl_close($ch); return $data; } $url = "https://storage.scrapinghub.com/items/397187/2/127"; $data = get_data($url); echo '<pre>';`print_r($data_json);`die; // For Print Value 

Check My JSON Value

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.