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读注册表
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP 和 XML: 使用expat函数(三)
Oct 09 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
Feb 16 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
深入PHP变量存储的详解
Jun 13 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 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访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
PDO::errorInfo讲解
2019/01/28 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
jQuery示例收集
2010/11/05 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python CSV模块使用实例
2015/04/09 Python
python爬虫使用cookie登录详解
2017/12/27 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python中wx模块的具体使用方法
2020/05/15 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
技校毕业生个人学习的自我评价
2014/02/21 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2014年文员工作总结
2014/11/18 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
运动会5000米加油稿
2015/07/21 职场文书
导游词之西安骊山
2019/12/03 职场文书