php模拟post行为代码总结(POST方式不是绝对安全)


Posted in PHP onFebruary 22, 2012

这里提供两种方法供选择:第一:手写代码。第二:利用HttpClient php类库

第一种方法:

<?PHP 
$flag = 0; 
//要post的数据 
$argv = array( 
'var1'=>'abc', 
'var2'=>'你好吗'); 
//构造要post的字符串 
foreach ($argv as $key=>$value) { 
if ($flag!=0) { 
$params .= "&"; 
$flag = 1; 
} 
$params.= $key."="; $params.= urlencode($value); 
$flag = 1; 
} 
$length = strlen($params); 
//创建socket连接 
$fp = fsockopen("127.0.0.1",80,$errno,$errstr,10) or exit($errstr."--->".$errno); 
//构造post请求的头 
$header = "POST /mobile/try.php HTTP/1.1"; 
$header .= "Host:127.0.0.1"; 
$header .= "Referer:/mobile/sendpost.php"; 
$header .= "Content-Type: application/x-www-form-urlencoded"; 
$header .= "Content-Length: ".$length.""; 
$header .= "Connection: Close"; 
//添加post的字符串 
$header .= $params.""; 
//发送post的数据 
fputs($fp,$header); 
$inheader = 1; 
while (!feof($fp)) { 
$line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据 
if ($inheader && ($line == "n" || $line == "")) { 
$inheader = 0; 
} 
if ($inheader == 0) { 
echo $line; 
} 
} 
fclose($fp); 
?>

第二种方法是:使用httpclient类

$pageContents = HttpClient::quickPost('http://example.com/someForm', array( 
'name' => 'Some Name', 
'email' => 'email@example.com' 
));

使用httpclient类库,可以去官方下载最新的类库,官方地址为:http://scripts.incutio.com/httpclient/index.php

附加一些点php httpclient的其他几个用法

静态方法获取网页:

$pageContents = HttpClient::quickGet('http://bankcha.com')

Get方法获取

$client = new HttpClient('bankcha.com'); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 
带调试的Get方法获取 

PHP代码 
$client = new HttpClient('bankcha.com'); 
$client->setDebug(true); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 

带自动转向的Get方法 

PHP代码 

$client = new HttpClient('www.bankcha.com'); 
$client->setDebug(true); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 

检查页面是否存在 

PHP代码 
$client = new HttpClient('bankcha.com'); 
$client->setDebug(true); 
if (!$client->get('/thispagedoesnotexist')) { 
die('An error occurred: '.$client->getError()); 
} 
if ($client->getStatus() == '404') { 
echo 'Page does not exist!'; 
} 
$pageContents = $client->getContent(); 

伪造客户端 

PHP代码 
$client = new HttpClient('bankcha.com'); 
$client->setDebug(true); 
$client->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207'); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 

登录验证并请求一个网页 

PHP代码 
$client = new HttpClient('bankcha.com'); 
$client->post('/login.php', array( 
'username' => 'Simon', 
'password' => 'ducks' 
)); 
if (!$client->get('/private.php')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 

HTTP授权 

PHP代码 
$client = new HttpClient('bankcha.com'); 
$client->setAuthorization('Username', 'Password'); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
$pageContents = $client->getContent(); 

输出头信息 

PHP代码 
$client = new HttpClient('bankcha.com'); 
if (!$client->get('/')) { 
die('An error occurred: '.$client->getError()); 
} 
print_r($client->getHeaders()); 

设置一个域内重定向最多次数 

PHP代码 
$client = new HttpClient('www.bankcha.com'); 
$client->setDebug(true); 
$client->setMaxRedirects(3); 
$client->get('/');

php fsockopen 伪造 post和get方法
fsockopen 伪造 post和get方法哦,如果你正在找 伪造 post和get方法的php处理代码这款不错哦。
<?php 
//fsocket模拟post提交 
$purl = "http://localhost/netphp/test2.php?uu=rrrrrrrrrrrr"; 
print_r(parse_url($url)); 
sock_post($purl,"uu=55555555555555555"); 
//fsocket模拟get提交 
function sock_get($url, $query) 
{ 
$info = parse_url($url); 
$fp = fsockopen($info["host"], 80, $errno, $errstr, 3); 
$head = "GET ".$info['path']."?".$info["query"]." HTTP/1.0rn"; 
$head .= "Host: ".$info['host']."rn"; 
$head .= "rn"; 
$write = fputs($fp, $head); 
while (!feof($fp)) 
{ 
$line = fread($fp,4096); 
echo $line; 
} 
} 
sock_post($purl,"uu=rrrrrrrrrrrrrrrr"); 
function sock_post($url, $query) 
{ 
$info = parse_url($url); 
$fp = fsockopen($info["host"], 80, $errno, $errstr, 3); 
$head = "POST ".$info['path']."?".$info["query"]." HTTP/1.0rn"; 
$head .= "Host: ".$info['host']."rn"; 
$head .= "Referer: http://".$info['host'].$info['path']."rn"; 
$head .= "Content-type: application/x-www-form-urlencodedrn"; 
$head .= "Content-Length: ".strlen(trim($query))."rn"; 
$head .= "rn"; 
$head .= trim($query); 
$write = fputs($fp, $head); 
while (!feof($fp)) 
{ 
$line = fread($fp,4096); 
echo $line; 
} 
} 
?>
PHP 相关文章推荐
php连接函数implode与分割explode的深入解析
Jun 26 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
php实例分享之mysql数据备份
May 19 PHP
Linux中为php配置伪静态
Dec 17 PHP
PHP中的一些常用函数收集
May 26 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
PHP的全局错误处理详解
Apr 25 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
用穿越火线快速入门php面向对象
Feb 22 #PHP
php重定向的三种方法分享
Feb 22 #PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 #PHP
我的php学习笔记(毕业设计)
Feb 21 #PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 #PHP
修改PHP的memory_limit限制的方法分享
Feb 21 #PHP
php中取得文件的后缀名?
Feb 20 #PHP
You might like
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
Python中非常实用的一些功能和函数分享
2015/02/14 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
元旦促销方案
2014/03/15 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
社区植树节活动总结
2015/02/06 职场文书
放假通知格式
2015/04/14 职场文书