【问题标题】:Using a proxy server with fopen使用带有 fopen 的代理服务器
【发布时间】:2013-02-23 11:58:12
【问题描述】:

我正在尝试使用 fopen 从另一个网站读取远程文件。我想使用代理来做到这一点,据我所知,我可以做到:

$context = stream_context_create(array(
    'http' => array(
        'proxy' => 'tcp://192.168.10.10:80' // The proxy server address and port
    ),
));

$file = fopen($url, 'r', false, $context)

但是有没有办法使用该代理的用户名和密码进行身份验证?还是我只能使用公共代理?

另外,代理定义是tcp://192.168.10.10:80。如果我想使用 HTTP 代理,我可以将其更改为 http://192.168.10.10:80 吗?

谢谢。

【问题讨论】:

    标签: php proxy stream fopen


    【解决方案1】:

    如果你不明白$auth 是什么。

    例如,我有这个代理http://myproxyuser:myprxypassword@domain:port

    然后

    $auth = base64_encode("myproxyuser:myprxypassword");
    

    【讨论】:

      【解决方案2】:

      如果代理需要身份验证,您可以在$context 中使用Proxy-Authorization。示例来自PHP.Net

      $opts= array(
                       'http' => array( 
                       'proxy' => 'tcp://proxyip:8080', 
                       'header' => array( 
                                           "Proxy-Authorization: Basic $auth" 
                                        ) 
                      ) 
      ); 
      $context = stream_context_create($opts); 
      

      另外,我认为您不能在tcp://192.168.10.10:80 中将 tcp 更改为 http,因为代理所做的是代表客户端与另一台服务器建立 TCP 连接,然后在客户端和服务器之间来回路由所有流量。显然,它与 TCP(有时是 UDP)有关,而不是 HTTP.Http 代理只是“理解”由 HTTP 协议传递的流量。

      【讨论】:

      • 谢谢,没有考虑在请求中发送标头。
      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      相关资源
      最近更新 更多