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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
构建简单的Webmail系统
Oct 09 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
php开启openssl的方法
May 15 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 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者的疑难问答(1)
2006/10/09 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
python私有属性和方法实例分析
2015/01/15 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
C++面试题目
2013/06/25 面试题
自荐信格式范文
2013/10/07 职场文书
教师年终个人总结
2015/02/11 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
运动会广播稿200字
2015/08/19 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python