【问题标题】:How pass through a download from a https source to a http connection?如何通过从 https 源的下载到 http 连接?
【发布时间】:2011-09-02 11:08:20
【问题描述】:

我有以下格式的网址(我把它写成 aregex):

http://exampledomain\.com/files/.+

客户端通过我的代理服务器请求该 URL。

我在此请求中注入了一个自定义授权标头。 这没问题,我可以在 apache 中使用 mod_proxy 和 mod_headers。

然而,这个 url 提供了一个 302 重定向到另一个源,最终应该到达客户端。

这个其他 url 是 SSL 安全的,看起来像:

https://example.+\.exampledomain.\com/files/.+/.+

它需要与另一个相同的授权标头。但是因为它的 hTTPS 我不能简单地使用 mod 标头注入它。

因此,我的计划是设置一个反向代理,用于请求带有授权标头的第一个 HTTP URL。后面是一个获取请求的脚本,解析出第二个 HTTPS URL 并下载带有自定义授权标头的源并将接收到的文件(字节和 http 标头)传递给客户端。

我熟悉 Apache2 和 PHP,因此最好坚持使用这些。不过没必要。

澄清一下,我们在这里讨论的是 rapidshare 链接。我的公司在那里有备份文件和存储,因为它是最便宜的云托管。有一些作业服务器需要获取文件,但我无法在它们上配置用户/密码。所以代理服务器应该添加高级认证信息。

我想过这样的事情:

proxy.php - 使用反向代理请求此文件并由网络服务器提供服务 此代理 php 由 htaccess 重写规则和 http://one-or-my-domoains/request-uri-from-the-original-request 上的 revery 代理写入(在 apache 中生成)

$url = "http://example.com/".$_SERVER["REQUEST_URI"];
$opts = array(
  'http'=>array(
    'header'=>"Cookie: myauthvalue=example\r\n"
  )
);
$context = stream_context_create($opts);
stream_context_set_default($context);
$http_content = get_headers($url, 1);

$ssl_location = $http_content['Location'];

$fp = fsockopen("ssl://".parse_url($ssl_location, PHP_URL_HOST), 443, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET ".parse_url($PHP_URL_PATH, PHP_URL_HOST)." HTTP/1.1\r\n";
    $out .= "Host: ".parse_url($ssl_location, PHP_URL_HOST)."\r\n";
    $out .= "Cookie: myauthorization=something"; 
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

所以这基本上应该将 ssl 下载传递给用户启动的标准 http 连接,而不是重定向。

我现在的问题是:这行得通吗?我错过了什么?有什么注意事项吗?

我认为这将是一个合理的麻烦,包括反向代理设置和所有。

【问题讨论】:

  • 也许值得在 ServerFault 上问这个问题。
  • 你是对的,谢谢你提醒我。我认为这是一个应用问题,但一般领域可能更符合那里发现的专家

标签: php http proxy https http-headers


【解决方案1】:

我最终只是做了 passthru('wget ....') 工作得很好;)

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2012-11-16
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多