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 相关文章推荐
cache_lite试用
Feb 14 PHP
php不用正则采集速度探究总结
Mar 24 PHP
PHP strtr() 函数使用说明
Nov 21 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php微信开发之图片回复功能
Jun 14 PHP
php curl操作API接口类完整示例
May 21 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
详解Vue方法与事件
2017/03/09 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
利用python实现微信头像加红色数字功能
2018/03/26 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
英国女士家居服网站:hush
2017/08/09 全球购物
民族团结先进个人材料
2014/02/05 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
消防安全责任书
2014/04/14 职场文书
办理房产过户的委托书
2014/09/14 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
python析构函数用法及注意事项
2021/06/22 Python
Nginx缓存设置案例详解
2021/09/15 Servers