2010-11-12 101 views

回答

2

所以,基本上任何向您的回调发送HTTP POST请求的人实际上都会发送$ HTTP_RAW_POST_DATA。许多语言和框架都有库将它解析为HTTP POST params。 在PubSubHubbub的上下文中,正文不是由params构成的,因此您必须使用较低级别的$ HTTP_RAW_POST_DATA来解析XML,因为params无意义。

如果你想,以确保您的回调URL,也有倍数的方法来做到这一点:

  • 让您的回调网址,独特的和未猜测的:例如,使用的URL的唯一内部标识对于您订阅的每个Feed。
  • 订阅使用http * s *,并通过提供hub.secret。该中心将使用该秘密计算每个通知的唯一签名。您必须确保此签名与您获得的内容相符。 Read more about this here
+0

请注意,如果您希望使用类型为application/x-www-form-urlencoding的请求实体,那么'HTTP_RAW_POST_DATA'在PHP *中仅* * lower-level * *。这是因为PHP具有处理具有该类型的请求实体的本地功能。如果您希望使用其他类型的请求实体(如XML,YAML或JSON),那么PHP可能不具备该类型的本机功能。在这种情况下,'HTTP_RAW_POST_DATA'是处理请求实体的级别。 – yfeldblum 2010-11-12 17:29:14

+0

正是,谢谢澄清! – 2010-11-12 17:34:15

1

原始发布数据是用于提取可由$ _POST访问的POST参数的数据。用户也可以发布未发布的数据,是的。

0

用户将始终将原始POST数据发送到您的脚本。 PHP会解析它并填充$ _POST。当从表单提交,$ _ POST等价于:

parse_str($HTTP_RAW_POST_DATA, $data); 
var_dump($_POST); 
var_dump($data); // yields the same as $_POST 

但是,如果你真的想获取原始POST数据的首选方法是:

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

...因为$ HTTP_RAW_POST_DATA依赖于always_populate_raw_post_data INI设置,并且还因为它不会与multipart/form-data内容类型配合使用。

相关问题