本文目录一览:
- 1、php 获取网页头部信息和网页和网页源代码查看
- 2、php如何获取http头部信息
- 3、如何在php中获取curl请求的请求头信息及相应头信息
- 4、php如何获得http post的数据?
- 5、php 如何获取 客户端http header
- 6、php中怎样得到客户端的http请求header所有信息
php 获取网页头部信息和网页和网页源代码查看
?php
/**
* http下载类库
*/
class Httplib{
// 目标网站无法打开时返回的错误代码
var $_ERROR_CONNECT_FAILURE = 600;
// 自定义 UserAgent 字符串
var $_SEND_USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; LazyCMS.net::DownLoader)';
var $_url,$_method,$_timeout;
var $_scheme,$_host,$_port,$_path,$_query,$_referer;
var $_header;
var $_response;
/**
* 兼容PHP5模式
*
* @param 同下面的参数
*/
function __construct($url=null,$method='GET',$timeout=60){
@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
*/
function Httplib($url=null,$method='GET',$timeout=60){
return $this-__construct($url,$method,$timeout);
}
/**
* 改变连接url
*
* @param string $url
* @param string $method
* @param int $timeout
* @return object
*/
function connect($url=null,$method='GET',$timeout=60){
$this-_header = null;
$this-_response = null;
$this-_url = $url;
$this-_method = strtoupper(empty($method) ? 'GET' : $method);
$this-_timeout = empty($timeout) ? 30 : $timeout;
if (!empty($url)) {
$this-_parseURL($url);
}
return $this;
}
/**
* 发送请求
*
* @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; }
$_port = ((int)$this-_port!==80) ? ':'.$this-_port : null;
$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)) {
$response.= fread($fp,4096);
}
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);
} else {
if (is_array($params)) {
$QueryStr = http_build_query($params);
} else {
$QueryStr = $params;
}
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$QueryStr);
}
$fp = curl_exec($ch);
curl_close($ch);
if (!$fp) { return false; }
$i = 0; $length = strlen($fp);
// 读取 header
do{ $header.= substr($fp,$i,1); $i++; } while (!preg_match("/\r\n\r\n$/",$header));
// 遇到跳转,执行跟踪跳转
if ($this-_redirect($header)) { return true; }
// 读取内容
do {
$response.= substr($fp,$i,4096);
$i = $i + 4096;
} while ($length=$i);
unset($fp,$length,$i);
}
$this-_header = $header;
$this-_response = $response;
return true;
}
/**
* 跟踪跳转
*
* @param string $header
* @return bool
*/
function _redirect($header){
if (in_array($this-status($header),array(301,302))) {
if(preg_match("/Location\:(.+)\r\n/i",$header,$regs)){
$this-connect(trim($regs[1]),$this-_method,$this-_timeout);
$this-send();
return true;
}
} else {
return false;
}
}
/**
* 取得请求的header
*
* @return string
*/
function header(){
return $this-_header;
}
/**
* 请求返回的html
*
* @return string
*/
function response(){
return $this-_response;
}
/**
* 返回状态
*
* @param string $header
* @return int
*/
function status($header=null){
if (empty($header)) {
$header = $this-_header;
}
if(preg_match("/(.+) (\d+) (.+)\r\n/i",$header,$status)){
return $status[2];
} else {
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-_port = empty($aUrl['port']) ? 80 : (int)$aUrl['host'];
$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如何获取http头部信息
var_dump(apache_request_headers());
//服务器是apache的话 (我没试过别的服务器能否用)
http_get_request_headers()//需安装 pecl_http 扩展
如何在php中获取curl请求的请求头信息及相应头信息
获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。
获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。
php如何获得http post的数据?
PHP获取POST数据的几种方法:
方法1、最常见的方法是:$_POST['fieldname'];
说明:只能接收Content-Type:
application/x-www-form-urlencoded提交的数据。
方法2、file_get_contents("php://input");
说明:
允许读取
POST
的原始数据。
和
$HTTP_RAW_POST_DATA
比起来,它给内存带来的压力较小,并且不需要任何特殊的
php.ini
设置。
php://input
不能用于
enctype="multipart/form-data"。
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
说明:
总是产生
$HTTP_RAW_POST_DATA
变量包含有原始的
POST
数据。
此变量仅在碰到未识别
MIME
类型的数据时产生。
php 如何获取 客户端http header
?php
$dir=$HTTP_GET_VARS["dir"]; //.......取得上个页面传递来的路径
$file=$HTTP_GET_VARS["file"]; //.......取得传递来的文件名
$url=parse_url($HTTP_REFERER); /*......取得前一页面的URL地址,并将其放入一个数组中*/
if($url[host]!=$HTTP_HOST){echo "要下载本软件请到a href=;东方小屋/a";exit;} /*检查来源网站是不是自己的网站,如果不是,返回“要下载本……”*/
if(empty($dir))$dir="/"; //......如果路径名为空,则为指定根目录
if(empty($file)){echo "未指定要下载的文件!";exit;} /*如果文件名为空,返回“未指定……”*/
$rootdir="文件存放的根目录";//......你的下载路径根目录
$realurl=$rootdir.$dir; //.......取得你的下载目录
chdir($realurl); //......将当前目录转到下载目录中
if(!file_exists($file)){echo "对不起,此链接已经失效,请在下载页面上向我们报告,谢谢!";exit;} //......测试文件是否存在
$filename=$file;
//发送文件头信息
header("Cache-control: private"); // fix for IE
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($filename));
header("Content-Disposition: attachment; filename=$filename");
$fp = fopen($filename, 'r'); // 以读取方式打开指定文件
fpassthru($fp); // ** CORRECT ** 以二进制方式读取文件
fclose($fp); // 关闭文件
?
php中怎样得到客户端的http请求header所有信息
?php
ob_end_flush();
print_r(apache_request_headers());
?