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+oracle 分页类
Oct 09 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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 is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
检举信的格式及范文
2014/04/04 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
聘任书范文大全
2015/09/21 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏