php 模拟POST提交的三种方法[实例代码]
分享使用php模拟POST提交的三种方法,可以做的事很多:提交表单,发布留言。稍稍改进一下可以当做 php留言群发的小工具使用,只公布两种方法,其它的自己加工吧。关php于执行效率的问题,可以改进为linux底下命令行执行php,减少输出和增加多任务。以下是代码:1、通过curl函数$post_data =array();$post_data['clientname'] =
·
分享使用php模拟POST提交的三种方法,可以做的事很多:提交表单,发布留言。稍稍改进一下可以当做 php留言群发的小工具使用,只公布两种方法,其它的自己加工吧。
关php于执行效率的问题,可以改进为linux底下命令行执行php,减少输出和增加多任务。
以下是代码:
1、通过curl函数
- $post_data =array();
- $post_data['clientname'] ="test08";
- $post_data['clientpasswd'] = "test08";
- $post_data['submit'] ="submit";
- $url='http://xxx.xxx.xxx.xx/xx/xxx/top.php';
- $o="";
- foreach ($post_dataas$k=>$v)
- {
- $o.="$k=".urlencode($v)."&";
- }
- $post_data=substr($o,0,-1);
- $ch = curl_init();
- curl_setopt($ch,CURLOPT_POST,1);
- curl_setopt($ch,CURLOPT_HEADER,0);
- curl_setopt($ch,CURLOPT_URL,$url);
- //为了支持将输出结果curl_exec($ch)赋值给变量$result
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- //为了支持cookie
- curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt');
- curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
- $result = curl_exec($ch);
2.通过fsockopen
- $URL=‘http://xxx.xxx.xxx.xx/xx/xxx/top.php';
- $post_data['clientname'] ="test08";
- $post_data['clientpasswd'] = "test08";
- $post_data['submit'] ="ログイン";
- $referrer="";
- // parsing the given URL
- $URL_Info=parse_url($URL);
- // Building referrer
- if($referrer=="") // if not given use this script as referrer
- $referrer=$_SERVER["SCRIPT_URI"];
- // making string from $data
- foreach($post_data as$key=>$value)
- $values[]="$key=".urlencode($value);
- $data_string=implode("&",$values);
- // Find out which port is needed - if not given use standard (=80)
- if(!isset($URL_Info["port"]))
- $URL_Info["port"]=80;
- // building POST-request:
- $request.="POST".$URL_Info["path"]." HTTP/1.1\n";
- $request.="Host:".$URL_Info["host"]."\n";
- $request.="Referer:$referrer\n";
- $request.="Content-type: application/x-www-form-urlencoded\n";
- $request.="Content-length:".strlen($data_string)."\n";
- $request.="Connection: close\n";
- $request.="\n";
- $request.=$data_string."\n";
- $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
- fputs($fp,$request);
- while(!feof($fp)) {
- $result .=fgets($fp,128);
- }
- fclose($fp);
3.使用httpclient类
- $pageContents =HttpClient::quickPost('http://example.com/someForm',array(
- 'name' =>'Some Name',
- 'email' =>'email@example.com'
- ));
附:httpclient类库 下载 及 httpclient 类库的其它用法举例:
检查页面是否存在
- $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();
伪造客户端
- $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();
登录验证并请求一个网页
- $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();
httpclient类 更多用法实例,可参考:
http://scripts.incutio.com/httpclient/index.php
更多推荐
已为社区贡献2条内容
所有评论(0)