【问题标题】:How to get request content (body) in PHP?如何在 PHP 中获取请求内容(正文)?
【发布时间】:2011-11-03 11:55:26
【问题描述】:

我正在向内容中包含 XML 的 php 服务器发送请求:

POST /index3.php HTTP/1.0
Connection: Close
Accept: application/xml
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<root />

我已签入全局变量(如 $_GET$_POST$_ENV$_FILES$_REQUEST...),但它们都是空的。

如何检索服务器中的内容?

【问题讨论】:

  • HTTP Accept 标头“...可用于指定响应可接受的某些媒体类型。”您是在说您希望 PHP 以 XML 响应吗? "... 如果不存在 Accept 头字段,则假定客户端接受所有媒体类型。如果存在 Accept 头字段,并且服务器无法发送根据组合 Accept 字段值可接受的响应,那么服务器应该发送一个 406(不可接受的)响应。” w3.org/Protocols/rfc2616/rfc2616-sec14.html
  • 建议不要发送 HTTP Accept 标头,而是发送 HTTP Content-Length 标头。

标签: php request


【解决方案1】:

试试这个

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

来自manual

php://input 是一个只读流,允许您从请求正文中读取原始数据。

【讨论】:

  • 这需要更多的宣传,因为它是 php 开发人员非常重要的一部分,现在它就像一个隐藏的宝石
  • 如果php://input 是一个隐藏的宝石,那么用于处理编码的流过滤器将是整个环。 php.net/manual/en/function.stream-filter-append.php
【解决方案2】:

使用file_get_contents("php://input") (manual)。

在早于 7.0 的 PHP 中,您还可以使用 $HTTP_RAW_POST_DATA(取决于 always_populate_raw_post_data 设置)。

【讨论】:

  • 谢谢,我更改了答案以反映这一点
【解决方案3】:

试试这个:

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){
    $xml = $GLOBALS["HTTP_RAW_POST_DATA"];
    $file = fopen("data.xml","wb");
    fwrite($file, $xml);
    fclose($file);
    echo($GLOBALS["HTTP_RAW_POST_DATA"]);
}
?>

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多