PHP 中和 HTTP 相关的函数及使用
① get_headers 方法:取得服务器响应一个 HTTP 请求所发送的所有标头
例如:
<?php
$httpinfo = get_headers('http://www.baidu.com', 1);
print_r($httpinfo);
使用 FF 的查看页面源码查看返回的结果(如果省略第二个参数,返回的则是索引数组):
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sat, 24 Oct 2015 05:20:47 GMT
[Content-Type] => text/html
[Content-Length] => 14613
[Last-Modified] => Tue, 02 Sep 2014 08:55:13 GMT
[Connection] => Close
[Vary] => Accept-Encoding
[Set-Cookie] => Array
(
[0] => BAIDUID=57422D9DF880F51C9236D0AAC5AB11BA:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[1] => BIDUPSID=57422D9DF880F51C9236D0AAC5AB11BA; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[2] => PSTM=1445664047; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[3] => BDSVRTM=0; path=/
) [P3P] => CP=" OTI DSP COR IVA OUR IND COM "
[Server] => BWS/1.1
[X-UA-Compatible] => IE=Edge,chrome=1
[Pragma] => no-cache
[Cache-control] => no-cache
[BDPAGETYPE] => 1
[BDQID] => 0xe5d2f28c001a4c17
[BDUSERID] => 0
[Accept-Ranges] => bytes
)
而使用 FF 直接访问百度(未登录),返回的 HTTP 响应头信息:
HTTP/1.1 200 OK
Server: bfe/1.0.8.5
Date: Sat, 24 Oct 2015 05:20:20 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: private
Cxy_all: baidu+acb608f22c032a75f48a12dcc3a4e51c
Expires: Sat, 24 Oct 2015 05:19:22 GMT
X-Powered-By: HPHP
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0x9b2b20af00151024
BDUSERID: 0
Set-Cookie: BDSVRTM=0; path=/
BD_HOME=0; path=/
H_PS_PSSID=17522_1456_17619_17640_17001_17471_17073_15917_12248_17051; path=/; domain=.baidu.com
__bsi=11400537099011293757_00_0_I_R_4_0303_C02F_N_I_I_0; expires=Sat, 24-Oct-15 05:20:25 GMT; domain=www.baidu.com; path=/
Content-Encoding: gzip
一般使用 get_headers 方法请求一个 URL,根据其返回的数据判断状态码是否为 200 来判断所请求的资源是否存在。如果失败则返回 False 并发出一条 E_WARNING 级别的错误信息。
② file_get_contents 方法 和 $http_response_header 变量
使用 file_get_contents 打开一个 URL 时,会创建一个 $http_response_header 变量保存 HTTP 响应头信息(和 get_geaders 方法类似,get_headers 方法可以用过第二个参数是指定返回的保存 HTTP 响应头信息的数组是索引数组还是关联数组。而 $http_response_header 保存的是索引数组):
<?php
$html = file_get_contents('http://www.baidu.com/');
print_r($http_response_header);
返回:
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 24 Oct 2015 05:30:13 GMT
[2] => Content-Type: text/html
[3] => Content-Length: 14613
[4] => Last-Modified: Tue, 02 Sep 2014 08:55:13 GMT
[5] => Connection: Close
[6] => Vary: Accept-Encoding
[7] => Set-Cookie: BAIDUID=BCA76FCEBB02BA1E33EE2936557F4B93:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[8] => Set-Cookie: BIDUPSID=BCA76FCEBB02BA1E33EE2936557F4B93; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[9] => Set-Cookie: PSTM=1445664613; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[10] => Set-Cookie: BDSVRTM=0; path=/
[11] => P3P: CP=" OTI DSP COR IVA OUR IND COM "
[12] => Server: BWS/1.1
[13] => X-UA-Compatible: IE=Edge,chrome=1
[14] => Pragma: no-cache
[15] => Cache-control: no-cache
[16] => BDPAGETYPE: 1
[17] => BDQID: 0xbd11b30400147402
[18] => BDUSERID: 0
[19] => Accept-Ranges: bytes
)
③ fopen 方法 和 stream_get_meta_data 方法:从封装协议文件指针中取得报头/元数据
<?php
$fp = fopen('http://www.baidu.com/', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);
返回
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 24 Oct 2015 05:45:19 GMT
[2] => Content-Type: text/html
[3] => Content-Length: 14613
[4] => Last-Modified: Tue, 02 Sep 2014 08:55:13 GMT
[5] => Connection: Close
[6] => Vary: Accept-Encoding
[7] => Set-Cookie: BAIDUID=3D2EF009AB73DEF6A808146A1CB6BEF5:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[8] => Set-Cookie: BIDUPSID=3D2EF009AB73DEF6A808146A1CB6BEF5; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[9] => Set-Cookie: PSTM=1445665519; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
[10] => Set-Cookie: BDSVRTM=0; path=/
[11] => P3P: CP=" OTI DSP COR IVA OUR IND COM "
[12] => Server: BWS/1.1
[13] => X-UA-Compatible: IE=Edge,chrome=1
[14] => Pragma: no-cache
[15] => Cache-control: no-cache
[16] => BDPAGETYPE: 1
[17] => BDQID: 0xb0560df000168912
[18] => BDUSERID: 0
[19] => Accept-Ranges: bytes
) [wrapper_type] => http
[stream_type] => tcp_socket
[mode] => r
[unread_bytes] => 0
[seekable] =>
[uri] => http://www.baidu.com/
[timed_out] =>
[blocked] => 1
[eof] =>
)
④ stream_context_creat 方法 和 file_get_contents 方法发送 POST 请求,模拟简单的灌输机器人
在构建 HTTP 请求头信息之前,可以先真实提交,查看真实提交的 HTTP 请求头信息:
post 的信息有:
如果返回以下内容则说明发送成功:
代码:
<?php
header("Content-type: text/html; charset=gb2312");
set_time_limit(0); $data = array(
'dopost' => 'send',
'comtype' => 'comments',
'aid' => 1083,
'fid' => 0,
'msg' => '轻轻的我来了',
'username' => 'car',
'notuser' => '',
'face' => 6,
'feedbacktype' => 'feedback',
'pwd' => '',
'validate' => '',
); $data = http_build_query($data);
//echo $data;
//dopost=send&comtype=comments&aid=1083&fid=0&msg=%C7%E1%C7%E1%B5%C4%CE%D2%C0%B4%C1%CB&username=car&face=6&feedbacktype=feedback&pwd=&validate=¬user= $opts = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type:application/x-www-form-urlencoded\r\n".
"Content-length:".strlen($data)."\r\n".
"Cookie:PHPSESSID=ee6jp9rhlom89p0apja3f7p983; LiveWSPAT63435038=1445669412671927548778; LiveWSPAT63435038sessionid
=1445669412671927548778; NPAT63435038lastinvite=1445669563512; CNZZDATA1000207770=502543333-1445663698-
%7C1445663698; CNZZDATA1256212238=1641575784-1445664133-%7C1445664133; browse=aid%3A1083%2C%u9F99%u51E4
%u53E4%u7B5D-%u6960%u6728%u7D20%u9762%2Chttp%3A//www.bj-tygy.com/plus/view.php%3Faid%3D1083%23%23%23
%2C14053232919107.jpg%7C14053233629812.jpg%7C14053233679827.jpg%7C14053233949645.jpg%2C10%u670824%u65E5
%2014%3A50%3A40; Hm_lvt_db0f997da69f1fbbefb1983923807f95=1445669441; Hm_lpvt_db0f997da69f1fbbefb1983923807f95
=1445669441; NPAT63435038LR_check_data=4%7C1445669563666%7C%7C%7C"."\r\n".
"Referer:http://www.bj-tygy.com/plus/view.php?aid=1083"."\r\n".
"User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:41.0) Gecko/20100101 Firefox/41.0"."\r\n",
'content' => $data
)
);
$context = stream_context_create($opts); function getCurrentTime (){
list ($msec,$sec) = explode(" ", microtime());
return (float)$msec + (float)$sec;
} $begin = getCurrentTime();
for($i = 0; $i < 10; $i ++){
$html = @file_get_contents('http://www.bj-tygy.com/plus/feedback_ajax.php?dopost=send&aid=1083', false, $context);
echo ($i+1),$html,'<br />';
//var_dump($http_response_header);
}
$end = getCurrentTime();
$spend = $end - $begin;
echo $spend."s\n";
这里使用了 http_build_query 方法:使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。
输出:
说明发送 POST 请求成功。
PHP 中和 HTTP 相关的函数及使用的更多相关文章
- Processing中和值域相关的函数
今天在群里有人问了个问题:请教下啊,群里能有高手讲讲norm(), lerp(), map()么,英文的实在是没看懂呀?鉴于很多人初学Processing都没弄明白这3个函数的用法,我这里简单介绍一下 ...
- Scala中Zip相关的函数
在Scala中存在好几个Zip相关的函数,比如zip,zipAll,zipped 以及zipWithIndex等等.我们在代码中也经常看到这样的函数,这篇文章主要介绍一下这些函数的区别以及使用. 1. ...
- python字符串 列表 元组 字典相关操作函数总结
1.字符串操作函数 find 在字符串中查找子串,找到首次出现的位置,返回下标,找不到返回-1 rfind 从右边查找 join 连接字符串数组 replace 用指定内容替换指定内容,可以指定次数 ...
- c/c++ 图相关的函数(二维数组法)
c/c++ 图相关的函数(二维数组法) 遍历图 插入顶点 添加顶点间的线 删除顶点 删除顶点间的线 摧毁图 取得与v顶点有连线的第一个顶点 取得与v1顶点,v1顶点之后的v2顶点的之后的有连线的第一个 ...
- linux新定时器:timefd及相关操作函数
timerfd是Linux为用户程序提供的一个定时器接口.这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景. 一,相关操作函数 #inclu ...
- 【Nature 子刊】I型HLA基因中和癌症相关的体细胞突变--转载
肿瘤的发生与免疫系统的功能密切相关.在免疫系统中,MHC(主要组织相容性复体,majorhistocompatibilitycomplex)是所有生物相容复合体抗原的一种统称.HLA(humanleu ...
- FreeRTOS-05任务相关API函数
根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务相关API函数: 1. main.c /* * */ #include " ...
- PHP基础系列(二) PHP数组相关的函数分类整理
之前写过一篇介绍 PHP字符串函数 的博文,这里写第二篇,本文主要介绍PHP 数组相关的函数: 一.检查数组中是否存在 array_key_exists — 检查给定的键名或索引是否存在于数组中 ar ...
- PHP基础系列(一) PHP字符串相关的函数分类整理
PHP提供了非常丰富的自带函数,有人说PHP是一个大的函数库,在某种程度上我是非常认同这种观点的,这个也是PHP非常容易上手的原因之一.在使用PHP编程的时候,需要实现某一功能的时候,如果说php自带 ...
随机推荐
- stm32——RTC实时时钟
stm32——RTC实时时钟 一.关于时间 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作.所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自19 ...
- Mysql 5.6.17-win64.zip配置
第一大步:下载. a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是 ZIP Archive 版的,win7 64位的机器支持这个,所以我建议都用这个.因为这个简单嘛,而且还干净. 地址见图 拉倒最下面 ...
- 使用MySQL索引的几个问题
1.索引不存储null值 更准确的说,单列索引不存储null值,复合索引不存储全为null的值.索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引, ...
- $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
- jquery easy ui 1.3.4 快速入门(1)
什么是easyui jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂 ...
- sublime Emmet的用法及相关语法
本节来讲一下Emmet插件的用法及相关语法. Emmet插件极大的提高了编程员的编程速度,下面我们来讲讲它的具体语法: 一.生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 docty ...
- 每个人都应该知晓的8项Resharper快捷键
(此文章同时发表在本人微信公众号“dotNET每日精华文章”) 如果你已经在用Resharper这个编程神器(机器杀手)的话,那么为了进一步提高工作效率熟悉它的一些特殊特性和快捷键那是必须的. Res ...
- JSP页面中的pageEncoding和contentType两种属性
关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容 ...
- Codeforces Round #313 (Div. 2) D. Equivalent Strings
D. Equivalent Strings Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/ ...
- mysql优化连接数防止访问量过高的方法
这篇文章主要介绍了mysql优化连接数防止访问量过高的方法,需要的朋友可以参考下 很多开发人员都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况,造成 ...