即使使用“代理授权:基本”,PHP也无法通过代理进行身份验证

时间:2018-08-01 05:18:12

标签: php proxy network-programming basic-authentication http-proxy

我在连接网络代理时遇到很多麻烦。我已经尝试了几种设置,但是没有一个起作用。即使我已经通过身份验证,最接近的方法也返回了“ HTTP / 1.1 407要求代理身份验证[Proxy-Authenticate]”错误。

这是我正在使用的代码:

<?php

// Edit the four values below
$PROXY_HOST = "proxy.det.nsw.edu.au"; // Proxy server address
$PROXY_PORT = "8080";    // Proxy server port
$PROXY_USER = "USERNAME";    // Username
$PROXY_PASS = "PASSWORD";   // Password
// Username and Password are required only if your proxy server needs basic authentication


$auth = base64_encode("$PROXY_USER:$PROXY_PASS");

stream_context_set_default(
 array(
  'http' => array(
   'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
   'request_fulluri' => true,
   'header' => "Proxy-Authorization: Basic $auth"
   // Remove the 'header' option if proxy authentication is not required
  )
 )
);



$targetURL = "http://stackoverflow.com/questions/17111112/using-get-headers-with-a-proxy";
print_r(get_headers($targetURL, 1));
echo ("<br><br>");

$result = file_get_contents($targetURL);
?>

这是代理的回报:

  

Array([0] =>需要HTTP / 1.1 407代理身份验证   [Proxy-Authenticate] =>数组([0] =>协商[1] => NTLM)   [Cache-Control] =>没有缓存[Pragma] =>没有缓存[Content-Type] =>   text / html; charset = utf-8 [Proxy-Connection] =>关闭[Set-Cookie] =>   BCSI-CS-47afdfff6410962d = 2;路径= / [连接] =>关闭   [Content-Length] => 653)

     

警告:   file_get_contents(http://stackoverflow.com/questions/17111112/using-get-headers-with-a-proxy):   无法打开流:HTTP请求失败! HTTP / 1.1 407代理   在C:\ inetpub \ wwwroot \ sites \ phpProxyTest.php中需要身份验证   在第36行

如果有帮助,我正在尝试根据代理对用户进行身份验证,以查看他们是否为有效用户,因此,我仅需要代理的是/否响应即可。不幸的是,我无权访问管理员登录名或代理的任何其他部分,因此直接获取用户不是一种选择。任何帮助将不胜感激,请询问您是否需要更多信息。

1 个答案:

答案 0 :(得分:0)

HTTP对代理的身份验证由代理的配置决定。

在您的情况下,该代理仅是对NEGOTIATE和NTLM的广告支持,因此发送Basic不会被接受。

您还说您已经“已通过身份验证”,但这不是您的电话。如果您之前已通过代理(例如,使用网络浏览器)进行了身份验证,则它可能会认为您已通过身份验证,或者可能要求对代理的每个连接都进行身份验证。

您将需要使用NTLM或NEGOTIATE才能通过该代理。