如何使用 HTTP 基本身份验证和 PHP curl 发出请求?

2022-08-30 06:07:57

我正在用PHP构建一个REST Web服务客户端,目前我正在使用curl向服务发出请求。

如何使用 curl 发出经过身份验证的(http 基本)请求?我必须自己添加标题吗?


答案 1

你想要这个:

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

Zend有一个REST客户端和zend_http_client,我相信PEAR有某种包装器。但它很容易自己做。

因此,整个请求可能如下所示:

$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);

答案 2

CURLOPT_USERPWD基本上使用http标头发送字符串的base64,如下所示:user:password

Authorization: Basic dXNlcjpwYXNzd29yZA==

因此,除了之外,您还可以使用标头选项,如下所示其他标头:CURLOPT_USERPWDHTTP-Request

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

推荐