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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
php设置编码格式的方法
Mar 05 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
分享PHP守护进程类
Dec 30 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
PHP在线打包下载功能示例
Oct 15 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 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
德生H-501的评价与改造
2021/03/02 无线电
PHP新手上路(十三)
2006/10/09 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
Yii2单元测试用法示例
2016/11/12 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
ie 调试javascript的工具
2009/04/29 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
axios学习教程全攻略
2017/03/26 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python实现飞机大战微信小游戏
2020/03/21 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
个人考核材料
2014/05/15 职场文书
社区禁毒工作方案
2014/06/02 职场文书
购房意向书
2014/08/30 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
高考升学宴主持词
2019/06/21 职场文书
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js