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

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(使用前将#替换为@)

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

  • 如何跟踪访问者所在的国家/地区并将他们重定向到适当的网站?

    我想跟踪访问者的国家 地区 然后将他们重定向到我网站的适当子域 就像谷歌所做的那样 如果我应该使用任何API 我可以在多大程度上依赖API的数据 我用的是php 下载并安装Maxmind 的 GeoLite 国家 http www maxm
  • 让我的函数访问外部变量

    我外面有一个数组 myArr array 我想让我的函数访问其外部的数组 以便它可以向其中添加值 function someFuntion myVal some processing here to determine value of m
  • 收到“路径‘OPTIONS’被禁止”。 ASP.NET网站异常

    我收到错误System Web HttpException Path OPTIONS is forbidden 自从我们将网站转移到新的服务器设置以来 我无法重新创建该错误 但我每天至少会收到几次有关此异常的电子邮件 有什么想法可能导致此问
  • 从按日期时间排序的 MySQL 表中获取用户的最后一个条目

    我有一张看起来像这样的桌子 USERNAME DATA DATETIME Jhon text1 2010 06 01 16 29 43 Mike text2 2010 06 01 16 29 22 Silver text3 2010 05
  • Codeigniter 滚动分页

    我正在使用 jquery 插件滚动分页在 codeigniter 中 我面临的问题是我的循环不会终止 并且也无法给出准确的结果 这是我的html code div div div class image box style margin l
  • PHP7.4中如何让PHPUnit测试属性初始化?

    采用 PHP7 4 类型化属性时 我们的应用程序中的代码样式更改之一是从 if null object gt value to if empty object gt value 即使类型化属性可为空 第一个 if 语句也会抛出Error 下
  • 在 PHP 中,有人可以解释克隆与指针引用吗?

    首先 我了解编程和对象 但以下内容对我来说 PHP 没有多大意义 在 PHP 中 我们使用 运算符来检索对变量的引用 我将引用理解为用不同变量引用相同 事物 的一种方式 如果我说例如 b 1 a b a 3 echo b 将输出 3 因为对
  • 使用php将cmyk转rgb

    我正在使用以下脚本将图像保存在文件夹中 但有一张图像显示此消息 图像无法显示 因为它包含错误 我认为问题出在图像上称为 cmyk 和 rgb 的东西 但是当在网上搜索使用 php 将 cmyk 转换为 rgb 的方法时 我找不到如何执行此操
  • 如何从 WooCommerce 中的订单获取客户详细信息?

    我有一个函数可以执行此操作 order new WC Order order id customer new WC Customer order id 我如何从中获取客户详细信息 我已经尝试了文档中的所有内容 但不知何故 只存在一些细节 但
  • 通过 PayPal REST API 示例获得折扣?

    PayPal GURUS 我需要帮助 如何插入折扣 我使用 REST API 可能是某个 可以显示代码示例吗 有什么方法可以使用 PHP REST API 发送折扣金额吗 目前 REST 支付 API 不支持折扣 您最好的选择是计算您端的折
  • PHP 电子邮件表单每次刷新页面时都会发送电子邮件

    我的 php 电子邮件每次刷新页面时都会发送电子邮件 例如 用户正在填写表单并使用发送按钮发送 这一切都很好 但如果他们刷新页面 它会再次发送包含所有相同表单信息的电子邮件 我相信这是问题代码 但不知道它是什么 require once c
  • 未调用 Ajax 回调。如何解决这个问题?

    我再次来这里寻求您的建议 我有一些 AJAX 调用 用于从我的编辑器 PHP 在线编辑器 运行代码 大家可以来看看my site http web guru99 com 我有一些 ajax 调用来发送编辑器的数据并接收输出 问题 for 循
  • 帮我用 PHP 解析这个文件

    Fri Nov 27 10 00 01 EST 2009 974 12506 Fri Nov 27 11 00 01 EST 2009 988 12655 Fri Nov 27 12 00 01 EST 2009 1005 12886 Fr
  • Zend Framework:检查 Zend View Placeholder 是否已设置

    如何在回显之前检查 Zend View 占位符是否已设置 因为我想在输出之前在它前面添加 I tried echo isset this gt placeholder title this gt placeholder title 但我得到
  • Python 结构的 PHP 替代品

    我很高兴在我的 Python 项目中使用 Fabric 进行部署 现在我正在从事一个更大的 PHP 项目 想知道是否有类似 PHP 的 Fabric 之类的东西 唔 为什么这有关系 Fabric 只是 python 脚本 所以它与项目语言无
  • Preg_match PHP 到 java 的翻译

    我在将 php preg match 转换为 java 时遇到一些问题 我以为我的一切都是正确的 但它似乎不起作用 这是代码 原始PHP Pattern for 44 Character UUID pattern 0 9A F 44 if
  • 在 PHP 中搜索多维数组中的值并获取其路径

    这是我的数组 array array 1 gt array title gt Level1 nodes gt array 11 gt array title gt sub1 company1 12 gt array title gt sub
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • PHP 在数组内循环

    我怎样才能在一个内部循环array在我的代码中 这是我的脚本的静态版本 val array array value gt Male label gt Male array value gt Female label gt Femal my
  • 为什么使用 LAMP 托管时避免使用 CGI for Python?

    我已经使用 PHP 多年了 最近我在论坛上看到很多帖子说PHP 已经过时了 现代编程语言更简单 更安全等等 所以 我决定开始学习Python 由于我习惯使用 PHP 因此我刚刚开始通过上传 htaccess 文件来构建页面 addtype

随机推荐

  • 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 发送此请求 并且无法将此传输类型更改为任何其他类型 所以我唯一的方法是以其他方式处理分块传输编码请