PHP file_get_contents授权头

9

有人能告诉我为什么这个私人Bitbucket仓库的授权功能在我的本地机器上(运行PHP版本5.3.17)可以工作,但在我的远程服务器上(运行PHP版本5.3.20)无法授权吗?

我没有得到错误信息,只是从Bitbucket获得了“禁止”的响应。但是从我的本地服务器运行一切正常。

function bitBucketConnect($url){
    global $bitPassword;
    global $bitUsername;
    $context = stream_context_create(array(
     'http' => array(
       'header' => "Authorization: Basic " . base64_encode("$bitUsername:$bitPassword")
       )
    ));

 // Make the request
 return file_get_contents($url, false, $context);
 }

4
你是否有从服务器IP地址登录的权限?看起来该IP地址已被屏蔽,也许Bitbucket有一个可以登录的IP地址白名单? - Green Black
1
代码本身应该可以在PHP5.2上正常运行。 - hek2mgl
已经通过Bitbucket进行了检查,并确认我的IP未被阻止 - 我还让我的托管服务更新到了PHP5.3服务器 - 但仍然没有成功。是否有人愿意在自己的私人BitBucket存储库上尝试我的函数,并确认它对您也有效? - Jeff
1
请查看此处的第七条注意事项,并尝试是否有助于您的情况。 - BudwiseЯ
1
你尝试过简单的cURL调用吗?至少这可以让你知道是连接问题还是file_get_contents问题。 - Muc
显示剩余11条评论
1个回答

14

您的代理服务器将响应需要身份验证。您可能会想,“但我已经提供了身份验证!”

问题在于“header”值仅适用于HTTP连接。因此,要在代理服务器上进行身份验证,您必须先从HTTP获取文件,然后才能在FTP上使用。

<?php 
$opts = array('ftp' => array( 
    'proxy' => 'tcp://vbinprst10:8080', 
    'request_fulluri'=>true, 
    'header' => array( 
        "Proxy-Authorization: Basic $auth" 
        ) 
    ), 
    'http' => array( 
    'proxy' => 'tcp://vbinprst10:8080', 
    'request_fulluri'=>true, 
    'header' => array( 
        "Proxy-Authorization: Basic $auth" 
        ) 
    ) 
); 
$context = stream_context_create($opts); 
$s = file_get_contents("http://www.example.com",false,$context); 
$s = file_get_contents("ftp://anonymous:anonymous@ftp.example.org",false,$context); 
?> 

哇,非常感谢 -- 这是我很久以来得到的最大帮助 :) - Jeff
当我使用(“Authorization:Basic $auth”)发送标头时,我遇到了相同的问题。我将其更改为(“Proxy-Authorization:Basic $auth”),并解决了我的问题。“Teun Lassche”谢谢。 - ali abdolhoseini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接