PHP设置头信息,取得返回头信息

php 设置头信息,取得返回头信息

张映 发表于 2011-05-27

分类目录: php

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

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

查看复制打印?

  1. <?php
  2. function FormatHeader($url, $myIp = null,$xml = null)
  3. {
  4. // 解悉url
  5. $temp = parse_url($url);
  6. $query = isset($temp[‘query‘]) ? $temp[‘query‘] : ‘‘;
  7. $path = isset($temp[‘path‘]) ? $temp[‘path‘] : ‘/‘;
  8. $header = array (
  9. "POST {$path}?{$query} HTTP/1.1",
  10. "Host: {$temp[‘host‘]}",
  11. "Content-Type: text/xml; charset=utf-8",
  12. ‘Accept: */*‘,
  13. "Referer: http://{$temp[‘host‘]}/",
  14. ‘User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)‘,
  15. "X-Forwarded-For: {$myIp}",
  16. "Content-length: 380",
  17. "Connection: Close"
  18. );
  19. return $header;
  20. }
  21. $interface = ‘http://localhost/test/header2.php‘;
  22. $header = FormatHeader($interface,‘10.1.11.1‘);
  23. $ch = curl_init();
  24. curl_setopt($ch, CURLOPT_URL, $interface);
  25. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  //设置头信息的地方
  26. curl_setopt($ch, CURLOPT_HEADER, 0);    //不取得返回头信息
  27. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  28. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  29. $result = curl_exec($ch);
  30. var_dump($result);
  31. ?>

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

查看复制打印?

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

三,看一下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>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
)

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

四,取得返回的头信息

查看复制打印?

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

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

查看复制打印?

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

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

修改一下header.php

查看复制打印?

  1. <?php
  2. function FormatHeader($url, $myIp = null,$xml = null)
  3. {
  4. // 解悉url
  5. $temp = parse_url($url);
  6. $query = isset($temp[‘query‘]) ? $temp[‘query‘] : ‘‘;
  7. $path = isset($temp[‘path‘]) ? $temp[‘path‘] : ‘/‘;
  8. $header = array (
  9. "POST {$path}?{$query} HTTP/1.1",
  10. "Host: {$temp[‘host‘]}",
  11. "Content-Type: text/xml; charset=utf-8",
  12. ‘Accept: */*‘,
  13. "Referer: http://{$temp[‘host‘]}/",
  14. ‘User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)‘,
  15. "X-Forwarded-For: {$myIp}",
  16. "Content-length: " . strlen($xml) ."\r\n\r\n" .$xml,  //修改1
  17. "Connection: Close"
  18. );
  19. return $header;
  20. }
  21. $xml = ‘<?xml version="1.0" encoding="utf-8"?>   //修改2
  22. <profile>
  23. <sha1>adsfadsf</sha1>
  24. <user_id>asdfasdf</user_id>
  25. <album_id>asdf</album_id>
  26. <album_name>asdf</album_name>
  27. <tags>asdfasd</tags>
  28. <title>asdfasdf</title>
  29. <content>asdfadsf</content>
  30. <type>asdfasdf</type>
  31. <copyright>asdfasdf</copyright>
  32. </profile>‘;
  33. $interface = ‘http://localhost/test/header2.php‘;
  34. $header = FormatHeader($interface,‘10.1.11.1‘,$xml);  //修改3
  35. $ch = curl_init();
  36. curl_setopt($ch, CURLOPT_URL, $interface);
  37. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  //设置头信息的地方
  38. curl_setopt($ch, CURLOPT_HEADER, 0);    //不取得返回头信息
  39. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  40. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  41. $result = curl_exec($ch);
  42. var_dump($result);
  43. ?>

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

查看复制打印?

  1. $raw_post_data = file_get_contents(‘php://input‘, ‘r‘);
  2. var_dump($raw_post_data);

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

时间: 2024-11-08 20:25:08

PHP设置头信息,取得返回头信息的相关文章

通过httpmodule获取webapi返回的信息

我写了一个webapi,想在module中获取请求的信息和返回的信息,写进log里,以方便以后查询.request信息很容易能拿到,但是返回信息得费一番周折.不多说,上代码 public class ResponseLoggerModule : IHttpModule { private class ResponseCaptureStream : Stream { private readonly Stream _streamToCapture; private readonly Encodin

fatal error C1854: 无法覆盖在创建对象文件.obj”的预编译头过程中形成的信息

原因: 将stdafx.cpp 的预编译头属性  由 创建预编译头(/Yc) 改成了 使用预编译头(/Yu) 解决: 改回为 创建预编译头(/Yc) 参考文档 http://blog.csdn.net/you_lan_hai/article/details/6966038 fatal error C1854: 无法覆盖在创建对象文件.obj"的预编译头过程中形成的信息

构造多种请求头信息,并随机抽取信息

# 构造多种请求头信息,并随机抽取信息 构造多个请求头信息使用random随机抽取信息话不多说,直接上代码 import random # 构造请求头信息,随机抽取信息agent1 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'agent2 = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) C

使用HttpClient登录知乎获取返回页面信息

引言 HttpClient是java语言下一个支持http协议的client编程工具包,它实现了HTTP协议的全部方法,可是不支持JS渲染.我们在做一些小玩意时,有可能须要登录某些站点获取信息,那么HttpClient就是你的好帮手,废话不多说,进入实战. 一 登录的实际意义 在HTTP横行的今天,我们每天都要登录一些站点,那么登录的意义是什么呢?首先要对cookie要有一定了解.cookie是存放在本地的一些小文件,它由server发送命令.浏览器在本地读写. 当訪问某些站点的时候,浏览器会检

android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, 结果总是存在好几个同样的activity,就算要返回的activity正在前台,点击消息后也会重新打开一个一样的activity,返回好几次才能退出, 而不能像qq之类的点击通知栏消息回到之前存在的activity,如果存在就不再新建一个activity 说的有点绕,如果是遇到此类问题的肯定能懂,没遇到

CAS学习笔记(三)—— SERVER登录后用户信息的返回

一旦CAS SERVER验证成功后,我们就会跳转到客户端中去.跳转到客户端去后,大家想一想,客户端总要获取用户信息吧,不然客户端是怎么知道登录的是哪个用户.那么客户端要怎么获取用户信息呢? 其实验证成功,跳转客户端这个过程中,CAS SERVER 会返回登录的相关信息给客户端,客户端只要进行获取,就能知道登录的具体是哪个用户了.不过CAS 默认只返回用户账号给客户端,那么怎么定义CAS SERVER返回的信息呢? 这就是本篇具体讲解的内容了,大家听我慢慢道来. 相关接口            

【SSO单点系列】(4):CAS4.0 SERVER登录后用户信息的返回

接着上一篇,在上一篇中我们描述了怎么在CAS SERVER登录页上添加验证码,并进行登录.一旦CAS SERVER验证成功后,我们就会跳转到客户端中去.跳转到客户端去后,大家想一想,客户端总要获取用户信息吧,不然客户端是怎么知道登录的是哪个用户.那么客户端要怎么获取用户信息呢? 其实验证成功,跳转客户端这个过程中,CAS SERVER 会返回登录的相关信息给客户端,客户端只要进行获取,就能知道登录的具体是哪个用户了.不过CAS 默认只返回用户账号给客户端,那么怎么定义CAS SERVER返回的信

【SSO单点系列】(4):CAS SERVER登录后用户信息的返回

接着上一篇,在上一篇中我们描述了怎么在CAS SERVER登录页上添加验证码,并进行登录.一旦CAS SERVER验证成功后,我们就会跳转到客户端中去.跳转到客户端去后,大家想一想,客户端总要获取用户信息吧,不然客户端是怎么知道登录的是哪个用户.那么客户端要怎么获取用户信息呢? 其实验证成功,跳转客户端这个过程中,CAS SERVER 会返回登录的相关信息给客户端,客户端只要进行获取,就能知道登录的具体是哪个用户了.不过CAS 默认只返回用户账号给客户端,那么怎么定义CAS SERVER返回的信

Apache安全优化:设置防盗链,隐藏版本信息 (内含Apache源码包和抓包工具)

防盗链:一些不良网站有时为了不增加成本又想扩充自己站点的内容,经常盗用其他网站的链接,一方面损害了原网站的合法利益,另一方面又加重了服务器的负担 隐藏版本信息:一般情况下,软件的漏洞信息和特定版本是相关的如果×××或别有用心之人得到了Apache的版本信息,就会使服务器遭受被×××的风险,为了防止这些事的发生,我们可以隐藏版本号,减少危险的发生 实验环境:一台linux作为web服务器,IP为192.168.100.222 一台win7作为盗链网站,IP为192.168.100.3 一台win7