0

我在现在使用基本身份验证保护的服务器上部署了一个 API。

我还有一个脚本在运行 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>
4

2 回答 2

1

如果系统提示您输入密码,那不是来自您的 curl 调用,而是来自 apache。我的猜测是您的https://my_site.myapi/test.php页面也被基本身份验证错误地保护了。

curl_exec() 将返回一个指示需要身份验证的错误,而不是提示您进行身份验证。

于 2012-11-14T20:34:12.457 回答
0

您的基本身份验证是否需要任何编码 - 例如,用户名和密码令牌可能需要进行 base64 编码。

要检查的另一件事是详细信息是否包含在 Authorization 标头中 - 检查请求标头以查看是否是这种情况。

于 2012-11-14T19:46:00.610 回答