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

网络整理 - 08-01

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

 $header = array (
 "POST {$path}?{$query} HTTP/1.1",
 "Host: {$temp['host']}",
 "Content-Type: text/xml; charset=utf-8",
 'Accept: */*',
 "Referer: {$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

查看复制打印?
1.<?php  
2.print_r($_SERVER);    //头信息里面有内容绝大部分是放在系统变量里面的  
3.?> 
<?php
print_r($_SERVER);    //头信息里面有内容绝大部分是放在系统变量里面的
?>三,看一下header.php请求的结果

string(1045) "Array
(
[HTTP_HOST] => localhost
[CONTENT_TYPE] => text/xml; charset=utf-8
[HTTP_ACCEPT] => */*
[HTTP_REFERER] =>
[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);    //取得返回头信息 
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. 
9.Array  
10.(  
11. [HTTP_HOST] => localhost  
12. [CONTENT_TYPE] => text/xml; charset=utf-8  
13. [HTTP_ACCEPT] => */*  
14. 。。。。。。。。。。。。。。。。 
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

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

 $header = array (
 "POST {$path}?{$query} HTTP/1.1",
 "Host: {$temp['host']}",
 "Content-Type: text/xml; charset=utf-8",
 'Accept: */*',
 "Referer: {$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后面加上以下二行

查看复制打印?
1.$raw_post_data = file_get_contents('php://input', 'r');  
2.var_dump($raw_post_data); 
$raw_post_data = file_get_contents('php://input', 'r');
var_dump($raw_post_data);这样就可以取到$xml的内容,并且只会取$xml的内容。