Php 如何处理收到的HTTP头

Php 如何处理收到的HTTP头,php,http-headers,patreon,Php,Http Headers,Patreon,我的问题是如何使用从其他站点收到的php读取标题信息。(我正在使用patreon webhooks) 文档页面显示: 当其中一个事件发生时,我们的服务器将向您指定的URL发送HTTP POST。此HTTP帖子将以JSON格式包含来自用户操作的相关数据。它还将具有标题 X-Patreon-Event: X-Patreon-Signature: 其中,消息签名是使用客户机_secret(使用MD5)签名的JSON POST主体HMAC 这是我的代码: <?php logData("asd");

我的问题是如何使用从其他站点收到的php读取标题信息。(我正在使用patreon webhooks) 文档页面显示:

当其中一个事件发生时,我们的服务器将向您指定的URL发送HTTP POST。此HTTP帖子将以JSON格式包含来自用户操作的相关数据。它还将具有标题
X-Patreon-Event:

X-Patreon-Signature:

其中,消息签名是使用客户机_secret(使用MD5)签名的JSON POST主体HMAC

这是我的代码:

<?php
logData("asd");
$headers = getallheaders();
$X_Patreon_Event = $headers['X-Patreon-Event'];
$X_Patreon_Signature = $headers['X-Patreon-Signature'];
logMusic(json_decode($X_Patreon_Event));
logMusic(json_decode($X_Patreon_Signature));
function logData($str){
    $url = '/var/www/websitelog.txt';
    $current = "$str\n";
    file_put_contents($url,$current,FILE_APPEND | LOCK_EX);
}
在脚本中编写:

var_dump($_SERVER);
您将看到返回的变量。然后,您可以像访问阵列一样访问它们

正如这里所回答的,getallheaders()是您要寻找的

既然是JSON,就在这些变量上使用JSON_decode(),阅读关于JSON_decode/encode的手册。

在脚本中写:

var_dump($_SERVER);
您将看到返回的变量。然后,您可以像访问阵列一样访问它们

正如这里所回答的,getallheaders()是您要寻找的


由于是JSON,请在这些变量上使用JSON_decode(),阅读有关JSON_decode/encode的手册。

getallheaders
(自PHP5.4.0起)将以关联数组的形式返回所有标头

$headers = getallheaders();
…然后您将能够检查以获取所需的标头值

$X_Patreon_Event = $headers['X-Patreon-Event'];
$X_Patreon_Signature = $headers['X-Patreon-Signature'];


旁注:
getallheaders()
函数可能不可用(例如,如果您的web服务器是nginx)。在这种情况下,您总是可以用一小段代码来重新实现该函数:

getallheaders
(因为PHP 5.4.0)将以关联数组的形式返回所有标头

$headers = getallheaders();
…然后您将能够检查以获取所需的标头值

$X_Patreon_Event = $headers['X-Patreon-Event'];
$X_Patreon_Signature = $headers['X-Patreon-Signature'];


旁注:
getallheaders()
函数可能不可用(例如,如果您的web服务器是nginx)。在这种情况下,您总是可以用一段代码来重新实现该函数:


我有一个使用php和MySQL的完全工作的webhooks页面,希望这对您有所帮助
注意**您需要PHP5.6>才能工作
我的实现需要mysql DB表

/**

--餐桌顾客的餐桌结构

CREATE TABLE IF NOT EXISTS patrons (
patron_key bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'key to row',
patron_id tinytext NOT NULL COMMENT 'patron id',
patron_fullname tinytext NOT NULL COMMENT 'fullname',
patron_firstname tinytext NOT NULL,
patron_lastname tinytext NOT NULL,
patron_email tinytext NOT NULL,
patron_image_url tinytext NOT NULL,
patron_pledge bigint(20) NOT NULL,
patron_list tinyint(4) NOT NULL COMMENT 'include in patrons honour list',
patron_decline tinytext,
PRIMARY KEY (patron_key)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --表通知的表结构

CREATE TABLE IF NOT EXISTS notifications (
notification_id bigint(20) NOT NULL AUTO_INCREMENT,
notification_type tinytext NOT NULL,
notification text NOT NULL,
notification_action int(11) NOT NULL,
notification_date tinytext NOT NULL,
notification_archived tinytext NOT NULL,
PRIMARY KEY (notification_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1401 ;
*/


}
我有一个使用php和MySQL的webhooks页面,可以完全正常工作。我希望这能有所帮助
注意**您需要PHP5.6>才能工作
我的实现需要mysql DB表

/**

--餐桌顾客的餐桌结构

CREATE TABLE IF NOT EXISTS patrons (
patron_key bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'key to row',
patron_id tinytext NOT NULL COMMENT 'patron id',
patron_fullname tinytext NOT NULL COMMENT 'fullname',
patron_firstname tinytext NOT NULL,
patron_lastname tinytext NOT NULL,
patron_email tinytext NOT NULL,
patron_image_url tinytext NOT NULL,
patron_pledge bigint(20) NOT NULL,
patron_list tinyint(4) NOT NULL COMMENT 'include in patrons honour list',
patron_decline tinytext,
PRIMARY KEY (patron_key)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --表通知的表结构

CREATE TABLE IF NOT EXISTS notifications (
notification_id bigint(20) NOT NULL AUTO_INCREMENT,
notification_type tinytext NOT NULL,
notification text NOT NULL,
notification_action int(11) NOT NULL,
notification_date tinytext NOT NULL,
notification_archived tinytext NOT NULL,
PRIMARY KEY (notification_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1401 ;
*/


}

唯一的问题是,当我测试帖子时,它不会重定向到我的页面。你是什么意思?是否尝试了var_dump($_SERVER)?OP需要获取头响应值而不是POSTvalues@Paolo哎呀,我的错,我读得太快了,你说得对。但是$\u服务器仍然可以工作。唯一的问题是,当我测试帖子时,它不会重定向到我的页面。你是什么意思?是否尝试了var_dump($_SERVER)?OP需要获取头响应值而不是POSTvalues@Paolo哎呀,我的错,我读得太快了,你说得对。但是$\u服务器仍然可以工作。我检查了javascrip控制台,它说这个错误:
POSThttps://api.patreon.com/oauth2/webhooks/32/test?json-api version=1.0 send@jquery.min.js:2v.extend.ajax@jquery.min.js:2(匿名函数)@webhooks:714v.event.dispatch@jquery.min.js:2o.handle.u@jquery.min.js:2 webhooks:1 XMLHttpRequest无法加载https://api.patreon.com/oauth2/webhooks/32/test?json-api版本=1.0。请求的资源上不存在“Access Control Allow Origin”标头。起源'https://www.patreon.com因此,不允许访问。响应的HTTP状态代码为500。
这是因为您没有在AJAX请求中发送
访问控制允许来源
头。这与这个问题无关。问题是它不会将我发送到页面,所以我无法将其回显,或者当我尝试将其登录到一个文件时,没有发生任何事情。您写的我的问题是如何使用从其他网站收到的php读取标题信息-如果您的问题不同,那么它应该提出不同的问题。隔离问题,发布代码的相关部分并询问……我检查了javascrip控制台,它显示以下错误:
posthttps://api.patreon.com/oauth2/webhooks/32/test?json-api version=1.0 send@jquery.min.js:2v.extend.ajax@jquery.min.js:2(匿名函数)@webhooks:714v.event.dispatch@jquery.min.js:2o.handle.u@jquery.min.js:2 webhooks:1 XMLHttpRequest无法加载https://api.patreon.com/oauth2/webhooks/32/test?json-api版本=1.0。请求的资源上不存在“Access Control Allow Origin”标头。起源'https://www.patreon.com因此,不允许访问。响应的HTTP状态代码为500。
这是因为您没有在AJAX请求中发送
访问控制允许来源
头。这与这个问题无关。问题是它不会将我发送到页面,所以我无法将其回显,或者当我尝试将其登录到一个文件时,没有发生任何事情。您写的我的问题是如何使用从其他网站收到的php读取标题信息-如果您的问题不同,那么它应该提出不同的问题。隔离问题,发布代码的相关部分并询问。。。