[英]“Authorization Required” Connecting to a Custom API with PHP and 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文件,我有這個(只是為了測試連接):
<?php
echo "Testing API...";
echo $_POST['api_key'];
echo $_POST['api_secret'];
?>
問題是,當我在服務器#1上運行測試腳本時,我得到了這個:
“需要授權
此服務器無法驗證您是否有權訪問所請求的文檔。 您提供了錯誤的憑據(例如,密碼錯誤),或者您的瀏覽器不了解如何提供所需的憑據。
此外,嘗試使用ErrorDocument處理請求時遇到401 Authorization Required錯誤。“
這肯定與cURL相關,因為Server#1可以與任何其他基本PHP腳本一起使用。
我在網上看到的所有例子似乎都不需要授權......所以我需要設置CURLOPT字段中的某些內容,或者.htaccess或其他地方有什么東西我缺少?
謝謝!
當服務器需要某種身份驗證來訪問網頁時,會出現401錯誤,在大多數情況下,它是基本身份驗證。
您能否確認是否在服務器#1上配置了基本身份驗證? 如果服務器#1需要基本身份驗證,那么瀏覽器將首次詢問它,然后它將存儲憑據並將其傳遞給每個后續請求。
如果配置了基本身份驗證,則以下將使用cURL傳遞憑據
curl_setopt($ ch,CURLOPT_USERPWD,$ username。“:”。$ password);
當我嘗試在運行API的同一台服務器上運行cURL命令時,我遇到了同樣的錯誤。
我終於知道httpd.conf中的虛擬主機設置是針對單個網關IP而不是127.0.0.1設置的。
因此,假設apache,我認為Server#2可能以與#1上的apache設置沖突的方式調用Server#1。
檢查Server#2上的/ etc / hosts文件,確定它是通過內部IP直接調用Server#1,還是僅默認發送到LAN外部。
檢查Server#1上的httpd.conf設置,特別是在解析域時為NameVirtualHost和VirtualHost配置的IP地址。 它們需要配置為允許Server#2調用的IP地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.