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截取中文字符串的问题
Jul 12 PHP
php标签云的实现代码
Oct 10 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
php插件Xajax使用方法详解
Aug 31 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 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
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
js轮播图代码分享
2016/07/14 Javascript
canvas绘制七巧板
2017/02/03 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
python实现图片素描效果
2020/09/26 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
四年级下册教学反思
2014/02/01 职场文书
《散步》教学反思
2014/03/02 职场文书
服务承诺口号
2014/05/22 职场文书
法人代表证明书
2014/09/18 职场文书
节约用电倡议书
2015/04/28 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
感谢师恩主题班会
2015/08/17 职场文书