Login
网站首页 > 文章中心 > 其它

关于php的头信息的简单介绍

作者:小编 更新时间:2023-08-16 08:19:11 浏览量:106人看过

php 获取网页头部信息和网页和网页源代码查看

php

/**

*/

class Httplib{

// 目标网站无法打开时返回的错误代码

// 自定义 UserAgent 字符串

var $_url,$_method,$_timeout;

var $_scheme,$_host,$_port,$_path,$_query,$_referer;

var $_header;

var $_response;

*

* @param 同下面的参数

@set_time_limit(0);

if (!empty($url)) {

$this-connect($url,$method,$timeout);

}

return $this;

* 初始化对象

* @param string $url

* @param string $method

* @param int $timeout

* @return object

return $this-__construct($url,$method,$timeout);

* 改变连接url

$this-_header = null;

$this-_response = null;

$this-_url = $url;

$this-_method = strtoupper(empty($method) ? 'GET' : $method);

$this-_parseURL($url);

* 发送请求

* @param array $params

* @return bool

function send($params=array()) {

$header = null; $response = null; $QueryStr = null;

if (!empty($params)) { $this-_method = 'POST'; }

if (function_exists('fsockopen')) {

$fp = @fsockopen($this-_host,$this-_port,$errno,$errstr,$this-_timeout);

if (!$fp) { return false; }

$SendStr = "{$this-_method} {$this-_path}{$this-_query} HTTP/1.0\r\n";

$SendStr.= "Host:{$this-_host}{$_port}\r\n";

$SendStr.= "Accept: */*\r\n";

$SendStr.= "Referer:{$this-_referer}\r\n";

$SendStr.= "User-Agent: ".$this-_SEND_USER_AGENT."\r\n";

$SendStr.= "Pragma: no-cache\r\n";

$SendStr.= "Cache-Control: no-cache\r\n";

//如果是POST方法,分析参数

if ($this-_method=='POST') {

//判断参数是否是数组,循环出查询字符串

if (is_array($params)) {

$QueryStr = http_build_query($params);

} else {

$QueryStr = $params;

$length = strlen($QueryStr);

$SendStr.= "Content-Type: application/x-www-form-urlencoded\r\n";

$SendStr.= "Content-Length: {$length}\r\n";

$SendStr.= "Connection: Close\r\n\r\n";

if(strlen($QueryStr) 0){

$SendStr.= $QueryStr."\r\n";

fputs($fp,$SendStr);

// 读取 header

do{ $header.= fread($fp,1); } while (!preg_match("/\r\n\r\n$/",$header));

// 遇到跳转,执行跟踪跳转

if ($this-_redirect($header)) { return true; }

// 读取内容

while(!feof($fp)) {

fclose($fp);

} elseif (function_exists('curl_exec')) {

$ch = curl_init($this-_url);

curl_setopt_array($ch,array(

CURLOPT_TIMEOUT = $this-_timeout,

CURLOPT_HEADER = true,

CURLOPT_RETURNTRANSFER = true,

CURLOPT_USERAGENT = $this-_SEND_USER_AGENT,

CURLOPT_REFERER = $this-_referer,

));

if ($this-_method=='GET') {

curl_setopt($ch,CURLOPT_HTTPGET,true);

curl_setopt($ch,CURLOPT_POST,true);

curl_setopt($ch,CURLOPT_POSTFIELDS,$QueryStr);

$fp = curl_exec($ch);

curl_close($ch);

$i = 0; $length = strlen($fp);

do{ $header.= substr($fp,$i,1); $i◆◆; } while (!preg_match("/\r\n\r\n$/",$header));

do {

} while ($length=$i);

unset($fp,$length,$i);

$this-_header = $header;

$this-_response = $response;

return true;

* 跟踪跳转

* @param string $header

function _redirect($header){

if(preg_match("/Location\:(.◆)\r\n/i",$header,$regs)){

$this-connect(trim($regs[1]),$this-_method,$this-_timeout);

$this-send();

return false;

* 取得请求的header

* @return string

function header(){

return $this-_header;

* 请求返回的html

function response(){

return $this-_response;

* 返回状态

* @return int

function status($header=null){

if (empty($header)) {

$header = $this-_header;

if(preg_match("/(.◆) (\d◆) (.◆)\r\n/i",$header,$status)){

return $this-_ERROR_CONNECT_FAILURE;

* 解析url

* @param string $url

function _parseURL($url){

$aUrl = parse_url($url);

$aUrl['query'] = isset($aUrl['query']) ? $aUrl['query'] : null;

$scheme = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : null;

$this-_scheme = ($scheme=='off' || empty($scheme)) ? 'http' : 'https';

$this-_host = isset($aUrl['host']) ? $aUrl['host'] : null;

$this-_path = empty($aUrl['path']) ? '/' : (string)$aUrl['path'];

$this-_query = strlen($aUrl['query']) 0 ? '?'.$aUrl['query'] : null;

$this-_referer = $this-_scheme.'://'.$aUrl['host'];

$http = new Httplib('');

$http-send();

$body = $http-response();

echo $body;

php中头信息已被发送的错误怎么办

PHP

ob_start();

请问PHP 怎样请求时编写头信息并且还能获得返回的头信息?

一种使用fsockopen,所有的头信息全部手动连接成字符串即可.

一种使用curl,可以直接将头信息写成数组,调用curl_setopt设定头信息即可.

php中http请求头有什么内容,由什么组成

PHP中一般采用getallheaders来获取头部,但事实上,有些模式下是获取不到的(以前真没有注意过在fastcgi下这个函数不能用)

在PHP里,想要得到所有的HTTP请求头,可以使用getallheaders方法,不过此方法并不是在任何环境下都存在,比如说,你使用fastcgi方式运行PHP的话,就没有这个方法,所以说我们还需要考虑别的方法,幸运的是$_SERVER里有我们想要的东西,它里面键名以HTTP_开头的就是HTTP请求头:

$headers = array();

foreach ($_SERVER as $key = $value) {

代码很简单,需要说明的是RFC里明确指出了信息头的名字是不区分大小写的.

不过并不是所有的HTTP请求头都是以HTTP_开头的的键的形式存在与$_SERVER里,比如说Authorization,Content-Length,Content-Type就不是这样,所以说为了取得所有的HTTP请求头,还需要加上下面这段代码:

if (isset($_SERVER['PHP_AUTH_DIGEST'])) {

$header['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST']);

} elseif (isset($_SERVER['PHP_AUTH_USER']) isset($_SERVER['PHP_AUTH_PW'])) {

if (isset($_SERVER['CONTENT_LENGTH'])) {

$header['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];

if (isset($_SERVER['CONTENT_TYPE'])) {

$header['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];

php如何获取http头部信息

var_dump(apache_request_headers());

//服务器是apache的话?(我没试过别的服务器能否用)

http_get_request_headers()//需安装?pecl_http?扩展

如何在php中获取curl请求的请求头信息及相应头信息

oCurl?=?curl_init();

//?设置请求头

$header[]?=?"Content-type:?application/x-www-form-urlencoded";

curl_setopt($oCurl,?CURLOPT_URL,?$sUrl);

curl_setopt($oCurl,?CURLOPT_HTTPHEADER,$header);

//?返回?response_header,?该选项非常重要,如果不为?true,?只会获得响应的正文

curl_setopt($oCurl,?CURLOPT_HEADER,?true);

//?是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文

curl_setopt($oCurl,?CURLOPT_NOBODY,?true);

//?使用上面定义的?ua

curl_setopt($oCurl,?CURLOPT_USERAGENT,$user_agent);

curl_setopt($oCurl,?CURLOPT_RETURNTRANSFER,?1?);

//?不用?POST?方式请求,?意思就是通过?GET?请求

curl_setopt($oCurl,?CURLOPT_POST,?false);

$sContent?=?curl_exec($oCurl);

//?获得响应结果里的:头大小

$headerSize?=?curl_getinfo($oCurl,?CURLINFO_HEADER_SIZE);

//?根据头大小去获取头信息内容

$header?=?substr($sContent,?0,?$headerSize);

curl_close($oCurl);

以上就是土嘎嘎小编为大家整理的关于php的头信息的简单介绍关于php的头信息的简单介绍相关咨询咨询主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章