通过http代理的PHP-https流

通过http代理的PHP-https流,php,curl,https,proxy,stream,Php,Curl,Https,Proxy,Stream,我试图通过HTTPS获取流的内容,但我必须通过HTTP代理。 我不想使用cURL,而是将fopen与上下文参数一起使用 问题是,我不能让它在HTTPS上工作(尽管HTTP工作得很好) 此不起作用: $stream = stream_context_create(Array("http" => Array("method" => "GET", "timeout" => 2

我试图通过HTTPS获取流的内容,但我必须通过HTTP代理。 我不想使用cURL,而是将fopen上下文参数一起使用

问题是,我不能让它在HTTPS上工作(尽管HTTP工作得很好)

不起作用:

$stream = stream_context_create(Array("http" => Array("method"  => "GET",
                                                      "timeout" => 20,
                                                      "proxy"   => "tcp://my-proxy:3128",
                                                      'request_fulluri' => True 
                                )));
echo file_get_contents('https://my-stream', false, $context); 
不起作用(卷曲):

有人知道第一段代码有什么问题吗?如果它与cURL一起工作,那么必须有一种方法使它与上下文一起工作。 我试图将上下文选项更改为一组不同的值,但没有成功

任何帮助都将不胜感激


谢谢。

您没有指定确切的错误消息,请尝试添加
ignore\u errors=>true
。但是如果您从Apache收到一个
400错误请求
,您可能遇到的问题是服务器名称指示和主机头不匹配。还有一个与此相关的PHP错误:

在解决此错误之前,请尝试以下修复:

$stream = stream_context_create(array(
    'http' => array(
        'timeout' => 20,
        'proxy' => 'tcp://my-proxy:3128',
        'request_fulluri' => true 
    ),
    'ssl' => array(
        'SNI_enabled' => false // Disable SNI for https over http proxies
    )
));
echo file_get_contents('https://my-stream', false, $context);

您没有指定确切的错误消息,请尝试添加
ignore\u errors=>true
。但是如果您从Apache收到一个
400错误请求
,您可能遇到的问题是服务器名称指示和主机头不匹配。还有一个与此相关的PHP错误:

在解决此错误之前,请尝试以下修复:

$stream = stream_context_create(array(
    'http' => array(
        'timeout' => 20,
        'proxy' => 'tcp://my-proxy:3128',
        'request_fulluri' => true 
    ),
    'ssl' => array(
        'SNI_enabled' => false // Disable SNI for https over http proxies
    )
));
echo file_get_contents('https://my-stream', false, $context);

据我回忆,传递给
stream\u context\u create
的数组中的键是将要使用的协议。尝试将密钥从http切换到https。谢谢,但我尝试了,但没有成功。我阅读了一些代码片段,其中人们在不将密钥更改为“https”的情况下发出https请求。这里唯一的区别是我使用的是代理:/n将密钥更改为
https
是不正确的
https://
调用将使用
http
上下文,然后是底层的
ssl
传输上下文。据我回忆,传递到
stream\u context\u create
的数组中的密钥是将要使用的协议。尝试将密钥从http切换到https。谢谢,但我尝试了,但没有成功。我阅读了一些代码片段,其中人们在不将密钥更改为“https”的情况下发出https请求。这里唯一的区别是我使用的是代理:/n将密钥更改为
https
是不正确的
https://
调用将使用
http
上下文,然后使用底层
ssl
传输上下文。