我正在创建我的第一个API,需要由合作伙伴使用cURL从他们的服务器访问。因此,在创建它时,我使用服务器#1创建测试连接脚本,使用服务器#2来托管API。在服务器#1上我有:
<?php
$url = "http://example.net/api/";
$data['api_key'] = "AFsASfafasasf";
$data['api_secret'] = "faskakfokfl3a";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
在服务器#2上,API文件,我有这个(只是为了测试连接):
<?php
echo "Testing API...";
echo $_POST['api_key'];
echo $_POST['api_secret'];
?>
问题是,当我在服务器#1上运行测试脚本时,我得到了这个:
“需要授权
此服务器无法验证您是否有权访问所请求的文档。您提供了错误的凭据(例如,密码错误),或者您的浏览器不了解如何提供所需的凭据。
此外,在尝试使用ErrorDocument处理请求时遇到了401 Authorization Required错误。“
这肯定与cURL相关,因为Server#1可以与任何其他基本PHP脚本一起使用。
我在网上看到的所有例子似乎都不需要授权......所以我需要设置CURLOPT字段中的某些内容,或者.htaccess或其他我缺少的其他内容?< / p>
谢谢!
答案 0 :(得分:3)
当服务器需要某种身份验证来访问网页时会出现401错误,并且在大多数情况下它是基本身份验证。
您能否确认您的服务器#1上是否配置了基本身份验证?如果服务器#1需要基本身份验证,那么浏览器将首次询问它,然后它将存储凭据并将其传递给每个后续请求。
如果配置了基本身份验证,则以下将使用cURL
传递凭据curl_setopt($ ch,CURLOPT_USERPWD,$ username。“:”。$ password);
答案 1 :(得分:0)
当我尝试在运行API的同一台服务器上运行cURL命令时,我遇到了同样的错误。
我终于知道httpd.conf中的虚拟主机设置是针对单个网关IP设置的,而不是127.0.0.1。
因此,假设apache,我认为Server#2可能以与#1上的apache设置冲突的方式调用Server#1。
检查服务器#2上的/ etc / hosts文件,看看它是否直接通过内部IP呼叫服务器#1,或者只是默认发送到局域网外。
< / LI>检查服务器#1上的httpd.conf设置,特别是在解析域时配置了NameVirtualHost和VirtualHost的IP地址。它们需要配置为允许服务器#2呼叫的IP地址。