我正在使用api,它需要在curl调用的基本身份验证中发送api密钥。
$json = "somedata";
$url = "http.server.com";
$key = "someKey";
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10 );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $key);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/2.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);
我的回答是:
"Server error","data":{"details":"Invalid API key.
我知道密钥本身是正确的,它在发送不使用php的curl请求时有效。
我认为USERPWD不是正确使用的curlopt,哪一个是?
来自docs:
Base64编码的字符串,由组合的用户名:密码生成 序列
在我们的例子中,API密钥设置为用户名,密码设置为空 字符串。
例如,如果API Key等于N8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF,
应该在以下字符串上执行Base64编码: N8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF:
在这种情况下,发送到的内容 授权标题是 基本TjhLendjcVZVeEFJMVvvkk1anlGSlBrUGxrRGw5dkY6。
答案 0 :(得分:0)
USERPWD是正确的,但您可能需要发送
$apiuser:$apikey
现在看来,你只是发送密钥。
答案 1 :(得分:0)
我调整了发送标题的方式:
$headers = array(
"POST ".$url." HTTP/1.0",
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"run\"",
"Content-length: ".strlen($xml_data),
"Authorization: Basic " . $key
);
并添加了
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);