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 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
基于文本的留言簿
Oct 09 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php缓存技术详细总结
Aug 07 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
分享几个超级震憾的图片特效
2012/01/08 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
python之yield表达式学习
2014/09/02 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
文明家庭先进事迹材
2014/01/27 职场文书
《乡愁》教学反思
2014/02/18 职场文书
《落花生》教学反思
2014/02/25 职场文书
珍惜资源的建议书
2014/08/26 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
求职信范文怎么写
2015/03/19 职场文书
幸福来敲门观后感
2015/06/04 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL