Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“需要授权”;使用PHP和cURL连接到自定义API_Php_Api_Rest_Curl - Fatal编程技术网

&引用;“需要授权”;使用PHP和cURL连接到自定义API

&引用;“需要授权”;使用PHP和cURL连接到自定义API,php,api,rest,curl,Php,Api,Rest,Curl,我正在创建我的第一个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, CURL

我正在创建我的第一个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文件中,我有以下内容(只是为了测试连接):


问题是,当我在服务器#1上运行测试脚本时,我得到以下结果:

“需要授权

此服务器无法验证您是否有权访问请求的文档。可能是您提供了错误的凭据(例如,错误的密码),或者您的浏览器不了解如何提供所需的凭据

此外,尝试使用ErrorDocument处理请求时遇到401 Authorization Required错误。“

这肯定与cURL有关,因为Server#1将与任何其他基本PHP脚本一起工作

我在网上看到的所有示例似乎都不需要授权……那么,我需要在CURLOPT字段中设置什么,还是在.htaccess中缺少什么


谢谢

401当服务器需要某种身份验证才能访问网页时,会出现错误,在大多数情况下,这是基本身份验证

请确认您的服务器#1上是否配置了基本身份验证?若服务器#1需要基本身份验证,那个么浏览器将第一次询问它,然后它将存储凭据,并在每次后续请求中传递凭据

如果配置了基本身份验证,那么下面将使用cURL传递凭据


curl_setopt($ch,CURLOPT_USERPWD,$username.:“$password)

401当服务器需要某种身份验证才能访问网页时,会出现错误,在大多数情况下,这是基本身份验证

请确认您的服务器#1上是否配置了基本身份验证?若服务器#1需要基本身份验证,那个么浏览器将第一次询问它,然后它将存储凭据,并在每次后续请求中传递凭据

如果配置了基本身份验证,那么下面将使用cURL传递凭据


curl_setopt($ch,CURLOPT_USERPWD,$username.:“$password)

在运行API的同一台服务器上运行cURL命令时,我遇到了相同的错误

我最终发现httpd.conf中的虚拟主机设置是为单个网关IP设置的,而不是127.0.0.1

因此,假设是apache,我认为服务器2调用服务器1的方式可能与服务器1上的apache设置冲突

  • 检查服务器#2上的/etc/hosts文件,确定它是通过内部IP直接调用服务器#1,还是默认情况下仅在LAN外部发送

  • 检查服务器#1上的httpd.conf设置,特别是在解析域时为哪些名为VirtualHost和VirtualHost的IP地址配置。它们需要配置为允许服务器2从中调用的IP地址


  • 当我尝试在运行API的同一台服务器上运行cURL命令时,我遇到了相同的错误

    我最终发现httpd.conf中的虚拟主机设置是为单个网关IP设置的,而不是127.0.0.1

    因此,假设是apache,我认为服务器2调用服务器1的方式可能与服务器1上的apache设置冲突

  • 检查服务器#2上的/etc/hosts文件,确定它是通过内部IP直接调用服务器#1,还是默认情况下仅在LAN外部发送

  • 检查服务器#1上的httpd.conf设置,特别是在解析域时为哪些名为VirtualHost和VirtualHost的IP地址配置。它们需要配置为允许服务器2从中调用的IP地址

  • <?php
    
    echo "Testing API...";
    echo $_POST['api_key'];
    echo $_POST['api_secret'];
    
    ?>