PHP设置头信息及取得返回头信息的方法


Posted in PHP onJanuary 25, 2016

本文实例讲述了PHP设置头信息及取得返回头信息的方法。分享给大家供大家参考,具体如下:

设置请求的头信息,我们可以用header函数,可以用fsockopen,可以用curl等,本文主要讲的是用curl来设置头信息,并取得返回后的头信息。

一、请求方设置自己的头信息,header.php

<?php
function FormatHeader($url, $myIp = null,$xml = null)
{
 // 解悉url
 $temp = parse_url($url);
 $query = isset($temp['query']) ? $temp['query'] : '';
 $path = isset($temp['path']) ? $temp['path'] : '/';
 $header = array (
 "POST {$path}?{$query} HTTP/1.1",
 "Host: {$temp['host']}",
 "Content-Type: text/xml; charset=utf-8",
 'Accept: */*',
 "Referer: http://{$temp['host']}/",
 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
 "X-Forwarded-For: {$myIp}",
 "Content-length: 380",
 "Connection: Close"
 );
 return $header;
}
$interface = 'http://localhost/test/header2.php';
$header = FormatHeader($interface,'10.1.11.1');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $interface);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
curl_setopt($ch, CURLOPT_HEADER, 0); //不取得返回头信息
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
var_dump($result);
?>

二、被请求方,取得头信息,header2.php

<?php
print_r($_SERVER); //头信息里面有内容绝大部分是放在系统变量里面的
?>

三、看一下header.php请求的结果

string(1045) "Array
(
[HTTP_HOST] => localhost
[CONTENT_TYPE] => text/xml; charset=utf-8
[HTTP_ACCEPT] => */*
[HTTP_REFERER] => http://localhost/
[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)
[HTTP_X_FORWARDED_FOR] => 10.1.11.1
[CONTENT_LENGTH] => 380
[PATH] => /usr/local/bin:/usr/bin:/bin
[SERVER_SIGNATURE] => <address>Apache/2.2.16 (Ubuntu) Server at localhost Port 80</address>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
)

上面那几个,我们可以明显看到,是我设置的头信息。

四、取得返回的头信息

curl_setopt($ch, CURLOPT_HEADER, 1); //取得返回头信息

我们把CURLOPT_HEADER设置成1,在取得的结果当中,显示数组的前面会有这些信息

string(1239) "HTTP/1.1 200 OK
Date: Fri, 27 May 2011 01:57:57 GMT
Server: Apache/2.2.16 (Ubuntu)
X-Powered-By: PHP/5.3.3-1ubuntu9.5
Vary: Accept-Encoding
Content-Length: 1045
Content-Type: text/html
Array
(
 [HTTP_HOST] => localhost
 [CONTENT_TYPE] => text/xml; charset=utf-8
 [HTTP_ACCEPT] => */*

五、$_SERVER部分头信息是拿不到的

修改一下header.php

<?php
function FormatHeader($url, $myIp = null,$xml = null)
{
 // 解悉url
 $temp = parse_url($url);
 $query = isset($temp['query']) ? $temp['query'] : '';
 $path = isset($temp['path']) ? $temp['path'] : '/';
 $header = array (
 "POST {$path}?{$query} HTTP/1.1",
 "Host: {$temp['host']}",
 "Content-Type: text/xml; charset=utf-8",
 'Accept: */*',
 "Referer: http://{$temp['host']}/",
 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
 "X-Forwarded-For: {$myIp}",
 "Content-length: " . strlen($xml) ."\r\n\r\n" .$xml, //修改1
 "Connection: Close"
 );
 return $header;
}
$xml = '<?xml version="1.0" encoding="utf-8"?> //修改2
 <profile>
 <sha1>adsfadsf</sha1>
 <user_id>asdfasdf</user_id>
 <album_id>asdf</album_id>
 <album_name>asdf</album_name>
 <tags>asdfasd</tags>
 <title>asdfasdf</title>
 <content>asdfadsf</content>
 <type>asdfasdf</type>
 <copyright>asdfasdf</copyright>
 </profile>';
$interface = 'http://localhost/test/header2.php';
$header = FormatHeader($interface,'10.1.11.1',$xml); //修改3
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $interface);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
curl_setopt($ch, CURLOPT_HEADER, 0); //不取得返回头信息
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
var_dump($result);
?>

如果这样的话,header2.php里面,打印$_SERVER不可能把头信息中的xml打印出来。这个时候,我们在header2.php后面加上以下二行

$raw_post_data = file_get_contents('php://input', 'r');
var_dump($raw_post_data);

这样就可以取到$xml的内容,并且只会取$xml的内容。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
thinkPHP5框架分页样式类完整示例
Sep 01 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
php函数式编程简单示例
Aug 08 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 #PHP
crontab无法执行php的解决方法
Jan 25 #PHP
win7安装php框架Yii的方法
Jan 25 #PHP
php结合md5实现的加密解密方法
Jan 25 #PHP
PHP几个实用自定义函数小结
Jan 25 #PHP
php代码架构的八点注意事项
Jan 25 #PHP
详解js异步文件加载器
Jan 24 #PHP
You might like
web方式ftp
2006/10/09 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
初识Javascript小结
2015/07/16 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
python提取内容关键词的方法
2015/03/16 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python base64编码解码实例
2015/06/21 Python
Python字典简介以及用法详解
2016/11/15 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
学校综治宣传月活动总结
2014/07/02 职场文书
离婚财产分配协议书
2014/10/21 职场文书
社会实践活动总结
2015/02/05 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
详解nodejs内置模块
2021/05/06 NodeJs