php
  • authentication
  • curl
  • 2012-11-14 94 views 0 likes 
    0

    我的服務器上部署了一個API,該服務器現在使用基本身份驗證進行保護。PHP:調用使用基本身份驗證保護的API

    我也有一個腳本運行在SAME服務器上,運行的APi需要調用API。

    腳本:test.php的

    <?php 
    $url = 'https://my_site.myapi/account/add/{"account_id":"1234555"} 
    $username = 'myname'; 
    $password = 'mypassword'; 
    $ch=curl_init(); 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_USERPWD, $username.":".$password); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    

    當我嘗試從瀏覽器中調用test.php的:

    https://my_site.myapi/test.php 
    

    我提拔了用戶名和密碼。我沒有收到錯誤消息。有任何想法嗎?

    虛擬主機節

    DocumentRoot /var/www/mysite/web/ 
    <Directory /> 
        Options FollowSymLinks 
        AllowOverride None 
    </Directory> 
    
    <Directory "/var/www/api_section_1"> 
        Options Indexes MultiViews FollowSymLinks 
        AllowOverride All 
        Order allow,deny 
        Allow from all 
        AuthType Basic 
        AuthName "Restricted Access" 
        AuthUserFile /usr/local/apache/passwd/passwords 
    </Directory> 
    
    Alias /winapi /var/www/another_section/ 
    <Directory "/var/www/another_section"> 
        Options Indexes MultiViews FollowSymLinks 
        AllowOverride None 
        Order allow,deny 
        Allow from all 
        AuthType Basic 
        AuthName "Restricted Access" 
        AuthUserFile /usr/local/apache/passwd/passwords 
    </Directory> 
    

    回答

    1

    如果系統提示您輸入密碼,那不是來自curl調用,而是來自apache。我的猜測是您的https://my_site.myapi/test.php頁面也被基本身份驗證錯誤保護。

    curl_exec()會返回一個錯誤,指出需要身份驗證,不會提示您輸入。

    +0

    @EastsideDeveloper我假設你在做出這些改變後重新啓動了Apache?它是否提示輸入同一目錄中的其他腳本的憑據? – dearlbry

    +0

    是的,我重新啓動Apache。我刪除了密碼文件並重新創建它。這解決了問題。 – EastsideDeveloper

    +0

    但是,我最初也有主文檔目錄保護(除了損壞的密碼文件) – EastsideDeveloper

    0

    是您的基本認證期望任何編碼 - 例如用戶名和密碼令牌可能需要base64編碼。

    另一件要檢查的是,細節使其進入授權標題 - 檢查請求標題,看看是否是這種情況。

    +0

    我試過,沒有base64編碼。我認爲使用cUrl的意義在於我不需要發送授權標題 – EastsideDeveloper

    +0

    我會想象,curl會將您設置爲摘要,但會根據您傳遞的卷頁選項進行設置。您需要檢查實際的請求標題以查看實際發送的內容。 – Fenton

    相關問題