php模拟post提交数据
2015-10-19 15:32
836 查看
php模拟post提交数据,用处很多,
另外也可以直接模拟post 表单提交, 不接接收数据
<?php // PHP POST数据的三种方法 // php有三种方法可以post数据,分别为Curl、socket、file_get_contents: /** * Socket版本 * 使用方法: * $post_string = "app=socket&version=beta"; * request_by_socket('facebook.cn','/restServer.php',$post_string); */ function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30) { $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout); if (!$socket) die("$errstr($errno)"); fwrite($socket, "POST $remote_path HTTP/1.0\r\n"); fwrite($socket, "User-Agent: Socket Example\r\n"); fwrite($socket, "HOST: $remote_server\r\n"); fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n"); fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . '\r\n'); fwrite($socket, "Accept:*/*\r\n"); fwrite($socket, "\r\n"); fwrite($socket, "mypost=$post_string\r\n"); fwrite($socket, "\r\n"); $header = ""; while ($str = trim(fgets($socket, 4096))) { $header .= $str; } $data = ""; while (!feof($socket)) { $data .= fgets($socket, 4096); } return $data; } /** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); */ function request_by_curl($remote_server, $post_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); $data = curl_exec($ch); curl_close($ch); return $data; } /** * 其它版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_other('http://facebook.cn/restServer.php',$post_string); */ function request_by_other($remote_server, $post_string) { $context = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded' . '\r\n'.'User-Agent : Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' . '\r\n'.'Content-length:' . strlen($post_string) + 8, 'content' => 'mypost=' . $post_string) ); $stream_context = stream_context_create($context); $data = file_get_contents($remote_server, false, $stream_context); return $data; } ?>
另外也可以直接模拟post 表单提交, 不接接收数据
<?php $query_url = array('username' =>'username','password' => 'password'); echo '<form action="http://lin.test.com" method="post" name="buttonForm" id="buttonForm" >'; foreach($query_url as $key => $val){ echo '<input type ="hidden" name="'.$key.'" value ="'.$val.'">'; } echo '</form>'; echo '<script>document.GetElementById("buttonForm").submit();</script>';
<?php //以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port = "80") { //需要提交的post数据 $argv = array('cookie' => array('user_login' => $user_login, 'password' => $password, '_wp_http_referer' => '/bbpress/', 're' => '', 'remember' => true)); foreach ($argv['cookie'] as $key => $value) { $params[] = $key . '=' . $value; } $params = implode('&', $params); $header = "POST /bbpress/bb-login.php HTTP/1.1\r\n"; $header .= "Host:$host:$port\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($params) . "\r\n"; $header .= "Connection: Close\r\n\r\n"; $header .= $params; $fp = fsockopen($host, $port); fputs($fp, $header); while (!feof($fp)) { $str = fgets($fp); //以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆 if (!(strpos($str, "Set-Cookie:") === false)) { $tmparray = explode(" ", $str); $cookiearray = explode("=", $tmparray[1]); $cookiepaths = explode("=", $tmparray[6]); $cookiename = urldecode($cookiearray[0]); $cookievalue = urldecode(substr($cookiearray[1], 0, strlen($cookiearray[1]) - 1)); $cookietime = time() + 3600 * 24 * 7; $cookiepath = urldecode(substr($cookiepaths[1], 0, strlen($cookiepaths[1]) - 1)); setcookie($cookiename, $cookievalue, $cookietime, $cookiepath); } } fclose($fp); } ?>
相关文章推荐
- php 堆排序
- RTP 协议分析
- 简单的PHP异常处理
- Smarty赋值对象方法,配置简化封装类
- 部署PHP时的4个配置修改说明
- 听韩顺平聊PHP初学者如何变身大牛
- php 抓取中国统计局 最新县及县以上行政区划代码
- Github比较有趣的PHP项目
- phpstorm9.02 下载
- ContentProvider
- 访问phpmyadmin提示没有权限
- PHP中empty()和isset()的区别
- PHP 7 vs HHVM 比较—兄弟连IT教育
- ubuntu 下安装 php mcrypt扩展
- php.exe 加入环境变量
- 配置 FTP 服务
- php curl post
- 帝国备份王放到空间以后打开index.php显示空白页,解决办法。
- ATPDraw v5.7 1CD电力电路仿真模拟软件
- ATPDraw v5.7 1CD电力电路仿真模拟软件