gpt4 book ai didi

php - 如何使用 PHP/cURL 代理请求并代理响应 header ?

转载 作者:行者123 更新时间:2023-12-04 18:09:57 25 4
gpt4 key购买 nike

我有一个浏览器客户端,它从我的网络服务中获取部分内容,例如使用 Range: bytes=100000-200000。请求进入 PHP 页面 fetch.php。在该 PHP 页面中,我使用 $_SERVER['HTTP_RANGE'] 获取请求的范围,然后使用 curl_setopt - CURLOPT_RANGE 将其设置到 curl 请求中.我遇到的问题是,远程服务器正在响应 206 Partial Content 状态和 Content-Range header ,但我的 PHP 页面仅响应 200 OK 并且没有 Content-Range 因此结果是客户端认为完整的部分文件。问题是,如何在 PHP 中将生成的 Content-Range 设置为原始请求?

如果我事先知道范围(我不知道),我可以只使用 header 命令并完成它,但范围会在响应中返回。我可以在 curl 中设置以接收包含内容的所有 header ,然后解析出 header ,使用 header 设置它并将响应设置为 206,然后回显所有数据......但数据是二进制的, 更不用说非常大了,所以这充其量似乎是次优的。

我想知道我是否可以以某种方式在 PHP 中设置一个选项以不发送它自己的任何 header ,并且基本上只是将整个响应回显给请求者。如果不完全考虑这一点,其他 header 、缓存、连接、代理等可能会有问题。

也许有一种方法可以让我只接收来自 curl 的 header (某种 partial_execute?),得到我需要的东西,设置 header 和响应代码,然后基本上完成 exec 并直接获取实际响应的输出?我无法从 curl 中看出如何做到这一点。

设置一个实际的反向代理也不是一个真正的选择,因为 PHP 脚本实际上确定了资源的目标服务器(它不是静态的)。

我想我可以跳过使用 curl 并直接进行 TCP/TLS 连接并管理 HTTP 请求/响应。

还有其他想法或可能性吗?谢谢!

最佳答案

它可能是也可能不是最佳解决方案,但它适用于我需要的场景。基本上只是使用 stream_socket_client 进行我自己的 HTTP(S) 获取,确保传递必要的响应代码和 header ,例如:

while ( true ) {
$h = stream_get_line( $fp, 2048, "\r\n");
if ( !$h ) {
break;
}
if ( 0==strncasecmp( $h, 'Content-', 8 ) ) {
header( $h );
}
else if ( 0==strncasecmp( $h, 'HTTP/1.', 7 ) ) {
header( $h );
}
}

fpassthru( $fp );

关于php - 如何使用 PHP/cURL 代理请求并代理响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com