如何正确处理分块编码请求?

2024-03-27

我有两个网站:一个使用 PHP 的 Lighttpd,第二个使用 Apache,这两个网站都不能正确处理分块传输编码。

我从我的手机 J2ME 发送此请求,并且无法将此传输类型更改为任何其他类型。

所以我唯一的方法是以其他方式处理分块传输编码请求。只要我可以在我的 CentOS 服务器上启用它,任何解决方案都是好的,我可以在其中安装和更改所有必要的内容。

所以我的问题是:如何在服务器端正确处理分块编码请求?


编辑: 您运行的是哪个版本的 PHP/Apache/LightHTTP?正如有this bug http://bugs.php.net/bug.php?id=50210之前在 PHP 中,但似乎在 5.2.13 和 5.3.2 中消失了。

如果上面的链接没有帮助,我想确切地知道 PHP 看到了什么,你能把它放在你的 api 中并发布结果吗? (当然是编辑过的)。

$input = file_get_contents('php://input');
$stdin = file_get_contents('php://stdin');

print "FILES: ";
print_r($_FILES);

print("<br>POST: ");
print_r($_POST);

print("<br>input: ".$input);
print("<br>stdin: ".$stdin);
die;

这样我们就可以看到 PHP 所看到的内容,如果它没有解码分块编码,那么我们可以手动解码它。

结束编辑。 (留下下面的内容以防其他人觉得有用)

我认为这是您之前问题的后续。我假设您正在从 PHP 读取流?

我几年前写过这个,它从分块编码流中读取,然后您可以对输出执行任何您想要的操作。如果它是一个大文件,请不要将其读入字符串,而是写入文件。

<?php
define('CRLF', "\r\n");
define('BUFFER_LENGTH', 8192);
$headers = '';
$body = '';
$length = 0;

$fp = fsockopen($host, $port, $errno, $errstr, $timeout);

// get headers FIRST
do
{
    // use fgets() not fread(), fgets stops reading at first newline
    // or buffer which ever one is reached first
    $data = fgets($fp, BUFFER_LENGTH);
    // a sincle CRLF indicates end of headers
    if ($data === false || $data == CRLF || feof($fp)) {
        // break BEFORE OUTPUT
        break;
    }
    $headers .= $data;
}
while (true);
// end of headers

// read from chunked stream
// loop though the stream
do
{
    // NOTE: for chunked encoding to work properly make sure
    // there is NOTHING (besides newlines) before the first hexlength

    // get the line which has the length of this chunk (use fgets here)
    $line = fgets($fp, BUFFER_LENGTH);

    // if it's only a newline this normally means it's read
    // the total amount of data requested minus the newline
    // continue to next loop to make sure we're done
    if ($line == CRLF) {
        continue;
    }

    // the length of the block is sent in hex decode it then loop through
    // that much data get the length
    // NOTE: hexdec() ignores all non hexadecimal chars it finds
    $length = hexdec($line);

    if (!is_int($length)) {
        trigger_error('Most likely not chunked encoding', E_USER_ERROR);
    }

    // zero is sent when at the end of the chunks
    // or the end of the stream or error
    if ($line === false || $length < 1 || feof($fp)) {
        // break out of the streams loop
        break;
    }

    // loop though the chunk
    do
    {
        // read $length amount of data
        // (use fread here)
        $data = fread($fp, $length);

        // remove the amount received from the total length on the next loop
        // it'll attempt to read that much less data
        $length -= strlen($data);

        // PRINT out directly
        #print $data;
        #flush();
        // you could also save it directly to a file here

        // store in string for later use
        $body .= $data;

        // zero or less or end of connection break
        if ($length <= 0 || feof($fp))
        {
            // break out of the chunk loop
            break;
        }
    }
    while (true);
    // end of chunk loop
}
while (true);
// end of stream loop

// $body and $headers should contain your stream data
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确处理分块编码请求? 的相关文章

  • 从开放的 HTTP 流中读取数据

    我正在尝试使用 NET WebRequest WebResponse 类来访问 Twitter 流 API 此处 http stream twitter com spritzer json 我需要能够打开连接并从打开的连接中增量读取数据 目
  • 如何使用类中的常量作为 php 函数中的参数定义?

    我有一堂课 class FetchMode const FetchAll 0 const FetchOne 1 const FetchRow 2 和一个函数 function getRecordSet FetchMode FetchMode
  • 防止刷新时提交双重表单

    我有一个简单的问题 我知道当用户使用 Post Redirect Get 模式重新加载页面时 我可以防止表单重新提交自身 但我的问题是 如果我将用户重定向回提交表单的同一页面 这种模式是否有效 我的意思是 我不想将用户重定向到另一个页面 请
  • 如何正确转义 mysql“搜索/喜欢”查询?

    Summary 我目前正在使用 search field LIKE this gt db gt escape like str search string 逃避动态创建的搜索查询 创建的 SQL 语句结果不会产生任何错误 也不会产生任何结果
  • 如何制作自己的 while 循环,就像 WordPress 循环一样?

    我是新来的 也是 PHP 新手 只是想知道如何制作我自己的灵活循环 就像在 WordPress 中一样 注意我不是在谈论 wordpress 我想在我自己的 PHP 应用程序上实现它 我们回顾一下WP 有一段代码是这样的 while hav
  • PHP ajax使用新数组上传多个文件

    它是我的上传 html 代码 div class col xs 12 div
  • PHP邮件发送附件但附件为空

    基本上 我正在尝试通过 PHPMail 发送 PDF 电子邮件已发送 我在 Outlook 中完美收到 问题是附件已损坏并且无法打开 我什至尝试发送 HTML 但也是空的 我尝试在论坛中进行研究 尝试了几个 工作代码 其他人让它与此代码一起
  • 从 MySQL 列创建 PHP 数组

    mysql fetch array会给我一个获取行的数组 从一列中所有行的值生成数组的最佳方法是什么 您可以循环遍历数组并创建一个新数组 如下所示 column array while row mysql fetch array info
  • 如何使用 Laravel Scheduler 命令将输出重定向到 STDOUT?

    我的调度程序应用程序运行到 Docker 容器中 Laravel 调度程序由主管管理并执行到容器中 我通过以下方式管理输出重定向 http veithen github io 2015 01 08 supervisord redirecti
  • 带有 WCF BadContextToken 的 PHP Soap 客户端

    经过几天的谷歌 in 尝试 脱发 我仍然找不到解决方案 所以请帮助 简短信息 我需要使用 PHP SOAP 客户端 的 WCF 服务 它使用 wsHttpBinding ws security 并且无法设置 basicHttpBinding
  • 用于货币转换的php脚本

    我正在寻找一个可以进行货币转换的 php 脚本 在哪里可以找到与 codeigniter 配合使用的工具 取自http www ecb europa eu stats exchange eurofxref html index en htm
  • SO 日期计算和格式化

    SO 使用什么脚本来显示日期 因为它的格式和逻辑显示似乎相当不错 我不确定 StackOverflow 使用什么 但最常见的时间戳表示之一是 twitter 所做的 它将时间戳显示为a moment ago 30 seconds ago x
  • 无法识别 php 变量

    我在两个文件中分别有以下代码 文件一 php
  • 计算网站上多个文件的下载次数的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 问题是 计算网站上多个文件的下载次数的最佳方法 我正在尝试做的事情 跟踪并统计多个文件的下载数量 对于具有不同扩展名的文件 foo z
  • 反向代理受 NTLM 保护的网站

    如何将请求代理到受 NTLM 保护的网站 例如团队基金会 and 共享点 我不断得到401 身份验证错误 根据这篇 Microsoft TechNet 文章 https www microsoft com technet prodtechn
  • WordPress 标头位置重定向

    WordPress 遇到问题 我想将页面重定向到文件夹 php adminpage php 内的特定 php 文件 SESSION变量等于 1 假设会话变量为 1 但浏览器返回 Not Found 有什么办法让它发挥作用吗 更新 已解决 使
  • 解决多个 jQuery 文件之间的冲突

    我的项目中有多个 jquery 文件 我正在使用jquery1 4 2使用facebox 但我也需要原型和scriptacolous脚本 我用过 jQuery noconflict 在我的代码中 但它不起作用 这是网址http mlep c
  • ECHO MYSQL 结果显示空白页 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我知道这一定很简单 但我做不到 我需
  • SQLSTATE[HY000] [2002] 连接尝试失败,因为连接方在一段时间后没有正确响应,

    我尝试连接 2 个数据库Laravel 5 6项目 但我遇到这样的错误 SQLSTATE HY000 2002 连接尝试失败 因为连接方在一段时间后没有正确响应 或者由于连接的主机未能响应而建立的连接失败 SQL 从中选择 mt merch
  • 将变量从 PHP 传递到 JavaScript 的有效方法[重复]

    这个问题在这里已经有答案了 有时我必须将一些变量从 PHP 传递到 JS 脚本 现在我是这样做的 var js variable 但这非常丑陋 我无法在 js 文件中隐藏我的 JS 脚本 因为它必须由 PHP 解析 处理这个问题的最佳解决方

随机推荐

  • JSON 名称-值对可以有空名称吗?

    我正在使用测试套件中的 example json 测试我的 JSON 代码here https code google com p json test suite 它包含很多名称 值对 其中名称只是一个空字符串 即 它是否正确 RFC462
  • 雅虎财经 API - GET 报价返回“无效 Cookie”

    在过去的几年中 我一直使用以下链接来获取查询中符号的完整当前报价 https query1 finance yahoo com v7 finance quote symbols AAPL https query1 finance yahoo
  • 如何将自定义表情符号上传到我的 Discord 机器人

    我已经制作了一个不和谐的机器人 现在我想开始添加自定义表情符号 我看过很多关于如何使用 client cache 或其他东西来输入表情符号的教程 但如何上传它们并获取它们的 ID 以在我的不和谐机器人中使用 我希望得到快速而简单的答案 lt
  • Google Analytics - 多个帐户的多个跟踪器?

    也许我的做法是错误的 但我希望我能得到一些见解 我为全国多个客户开发 我使用我的个人 开发分析帐户来跟踪我的许多网站 该帐户跟踪我所处理的所有域 配置文件 然而 现在营销人员也加入了进来 他们都希望安装自己的 GA 跟踪器 以及其他一些第三
  • 快速创建线程?

    我正在尝试快速生成一个线程 所以我有这一行 let thread NSThread target self selector doSomething object nil doSomething 是类范围内的函数 该行给出了这个错误 找不到
  • Java 的 SASS 实现? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 Java 中的 SASS 实现 可以与 JSP JSF 一起使用 对于 Python 我找到了 CleverCSS 但对于 J
  • 把我从 IE6 中拯救出来

    我正准备开始为一家相当大的公司开发一个新的网络项目 对于他们的所有用户 大约 17 000 人 来说 他们都被 IE6 困住了 他们计划在今年年底前让所有人过渡到 IE7 但 IT 部门开始推迟这一承诺 我被要求做的是给项目发起人更多的支持
  • 臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

    我正在尝试将支持数据库的 JSP 添加到现有的 Tomcat 5 5 应用程序 GeoServer 2 0 0 如果有帮助的话 应用程序本身与 Postgres 通信得很好 所以我知道数据库已启动 用户可以访问它 所有这些都是好东西 我想要
  • 如何在Android中获取电话簿中的所有联系人到SIM卡中?

    我正在努力从我的应用程序中的电话簿和 SIM 卡中获取所有联系人 我想将所有联系人存储在我的应用程序 SQLite DB 中 我正在使用的代码在正常情况下工作正常 在以下条件下出现问题 对于没有名字的联系人 那只是号码 SIM 卡中的联系人
  • 在 Javascript 中访问 Json

    SponsorID 382 SponsorName Test Name MonthEndReport true AccountingManager Me UnboundProperties State 16 当我尝试像这样访问上面的内容时
  • Google应用程序引擎过多的数据存储小操作

    我的网站有大约 50 个用户 并且我正在进行过多的小型数据存储操作 我正在积极进行内存缓存 没有那么多记录 但我仍然得到数百万个小型数据存储操作 Appstats 说成本为 0 但实际成本并非 0 我基本上知道小型数据存储操作可能发生在哪里
  • Rails,咖啡脚本出现语法错误

    我正在尝试使用 jquery ui 库在 Rails 中执行自动完成功能 但是我不断收到语法错误 语法错误 保留字 函数 在线 这是我的 Lesson js coffee 文件 jQuery gt function function spl
  • 在 Ruby on Rails 中获取控制器中 URL 的锚点部分

    有没有办法在控制器中获取 URL 的锚点部分 示例 如果我输入http www foo com bar anchor123 http www foo com bar anchor123我可以在我的控制器中获取字符串anchor123吗 在
  • 重写子文件夹的 url 条件

    我这里有一个 htaccess 文件 en htaccess 我想让这个条件 适用于 public html 内的主要 htaccess 也适用于子文件夹en RewriteCond THE REQUEST events eventDeta
  • 打开文件和读取内容的最可靠的方法是什么[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 当我必须始终读取整个文件时 我通常会
  • 使用 jQuery 设置列宽

    我有带有格式的 html 表 div table tbody tr td Set Width 10 Px td td Set Width 20 Px td tr tr Same for all tr tr tbody table div 即
  • 为什么 IDEA 显示 JavaDoc 错误?

    param string throws ApplicationException IDEA 突出显示 字符串 并告诉 未找到文档 为什么会这样 为以下内容编写一些文档string参数或调整声明有 Javadoc 问题检查设置 以免报告此类问
  • 应用程序要求首先将程序集 microsoft.reportviewer.processingObjectModel 版本 11.0.0.0 安装在全局程序集缓存中

    我有一个在 Visual Studio 2012 中创建的小型 Windows 窗体应用程序 它使用 ReportViewer 版本 11 0 0 0 应用目标框架为 NET 4 0 部署方式为ClickOnce 在我的电脑上可以安装 但在
  • Node.JS Schema.pre('save) 不更改数据

    我正在制作用户授权系统 并希望在将密码保存到数据库之前对其进行哈希处理 为了达到这个目的 我使用 bcrypt nodejs 上面标题中的问题 var mongoose require mongoose var bcrypt require
  • 如何正确处理分块编码请求?

    我有两个网站 一个使用 PHP 的 Lighttpd 第二个使用 Apache 这两个网站都不能正确处理分块传输编码 我从我的手机 J2ME 发送此请求 并且无法将此传输类型更改为任何其他类型 所以我唯一的方法是以其他方式处理分块传输编码请