【问题标题】:PHP stream_context_create with proxyPHP stream_context_create 与代理
【发布时间】:2012-07-16 10:24:30
【问题描述】:

我目前正在开发一个 Web 应用程序,它使用位于不同服务器上的 XML 接口,我必须通过代理访问它。

所以我尝试在stream_context_create 数组中设置代理,但它似乎不起作用。

$set = array(
    'http' => array(
        'method' => 'GET',
        'header' => sprintf(
            'Proxy-Authorization: Basic %s',
            base64_encode(Constants::XML_AUTH)
        ),
        'protocol_version' => '1.1',
        'proxy' => '89.122.180.178:46565'
    )
);
$stream = stream_context_create($set);

我不太确定我做错了什么。 如果我注释掉 proxy 键,我会得到应有的 403 Forbidden 响应。 如果我在 proxy 键中发表评论,我会收到 400 Bad Request 响应。

我不太确定我做错了什么。你能帮我吗?我以前从未使用 PHP 通过代理进行过通信。

【问题讨论】:

  • 400 响应是否有正文? 400 错误可能有很多原因,希望响应正文中会有有意义的错误消息。如果您在上下文数组中添加一个'ignore_errors' => TRUE 键,PHP 将返回响应的正文,而不管响应状态如何。
  • 它说 Invalid Request 说明请求中的某些内容丢失或损坏。
  • 它认为我需要在这里查看完整的代码,包括 URL(如果需要,您可以将实际的主机名空白),如果您可以显示 HTTP 请求,它肯定会有所帮助正在生成。您的服务器上有可用的 cURL 吗?它对请求提供了更精细的控制,并且更容易调试。

标签: php http proxy


【解决方案1】:

我的猜测是代理声明缺少协议。必须指定一个URI(根据doc),其中包含协议(方案)。

所以这可以工作:'proxy' => 'tcp://89.122.180.178:46565'。可能需要删除 'protocol_version',因为 tcp 可能不需要这样做。

这对你有用吗? (或者你已经解决了吗?... ;-)

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2018-09-10
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多