簡體   English   中英

“需要授權”使用PHP和cURL連接到自定義API

[英]“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。

  1. 檢查Server#2上的/ etc / hosts文件,確定它是通過內部IP直接調用Server#1,還是僅默認發送到LAN外部。

  2. 檢查Server#1上的httpd.conf設置,特別是在解析域時為NameVirtualHost和VirtualHost配置的IP地址。 它們需要配置為允許Server#2調用的IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM