php 模拟POST提交的2种方法

kevin.Zhu 发布于:2013-1-16 15:30 分类:Php  有 15 人浏览,获得评论 0 条  

http://ericxu131.iteye.com/blog/363664



$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_data as $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);

//为了支持cookie

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$result = curl_exec($ch);



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

$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);