如何在PHP curl中使用基本授权

Al *_*min 47 php curl authorization

我有基本授权的PHP卷曲请求有问题.

这是命令行curl:

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

我试过通过以下方式设置curl标题,但它不起作用

Authorization: Basic id:api_key
or 
Authorization: Basic {id}:{api_key}
Run Code Online (Sandbox Code Playgroud)

我得到响应"请求中的身份验证参数丢失或无效"但我使用了正确的id和api_key,它在命令行curl中工作(我测试过)

请帮我.

Suh*_*man 127

请尝试以下代码:

$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);
Run Code Online (Sandbox Code Playgroud)

  • @JoshPinter,你使用字符串''CURLAUTH_BASIC'而不是常量`CURLAUTH_BASIC` (6认同)
  • 我还能够删除`CURLOPT_HTTPAUTH`行并让它正常工作. (4认同)
  • 这对我有用`curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Basic ".base64_encode($this-&gt;username.":".$this-&gt;password), ]);` (2认同)
  • curl_exec()之后不应该curl_getinfo()吗? (2认同)

Kri*_*h R 7

你能试试吗

 $ch = curl_init($url);
 ...
 curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);  
 ...
Run Code Online (Sandbox Code Playgroud)

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


小智 7

$headers = array(
    'Authorization: Basic '. base64_encode($username.':'.$password),
);
...
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
Run Code Online (Sandbox Code Playgroud)

  • 当用三个现有答案回答一个六年前的问题时,重要的是解释你的答案所涉及的问题的新方面。仅代码答案几乎总是可以通过添加解释来改进。 (4认同)