PHP 模拟POST 两例

2008年11月3日 | 分类: PHP | 标签:

非常有用,直接给出代码:

post.php
[code] //1. 通过fsockopen
// 调用方法
$url = "http://localhost/58tz/test.php";
$port = 80;
$data['username'] = "admin";
$data['password'] = "admin888";
$data['action'] = "login";
$data['forward'] = "index.html";
$referer = "";
$re = SocksPost($url, $port, $data, $referer);

//echo $re;

// 函数体
/**
* Function Name: SocksPost
* Description : Post data in PHP files
* Parameter : $post_url
* Parameter : $post_port
* Parameter : $post_data
* Parameter : $post_referer
* Return : $result
*/
function SocksPost($post_url, $post_port=80, $post_data=array(), $post_referer="") {
// check data
if (func_num_args() == 0) {
return false;
}
if ($post_url == "" || $post_url == null) {
return false;
}
if (isset($post_port) && ($post_port < 0 || $post_port > 65535)) {
return false;
}
if (!is_array($post_data)) {
return false;
}

// building default
if($post_referer == "") {
$post_referer = $_SERVER["SCRIPT_URI"];
}

// building post string
foreach($post_data as $key=>$value) {
$values[] = "$key=" . urlencode($value);
}
$post_string = implode("&", $values);

// building url info
$url_info = parse_url($post_url);

// building post request:
$request .= "POST " . $url_info["path"] . " HTTP/1.1n";
$request .= "Host: " . $url_info["host"] . "n";
$request .= "Referer: $post_referern";
$request .= "Content-type: application/x-www-form-urlencodedn";
$request .= "Content-length: " . strlen($post_string)."n";
$request .= "Connection: closen";
$request .= "n";
$request .= $post_string."n";

// start post
$fp = fsockopen($url_info["host"], $post_port);
fputs($fp, $request);
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
return $result;
}
//2. 通过curl函数
// 调用方法
/*$url = "http://localhost/58tz/test.php";
$data['username'] = "admin";
$data['password'] = "admin888";
$data['action'] = "login";
$data['forward'] = "index.html";
$referer = "";
$re = CurlPost($url, $data, $referer);
*/
// 函数体
/**
* Function Name: CurlPost
* Description : Post data in PHP files
* Parameter : $post_url
* Parameter : $post_data
* Parameter : $post_referer
* Return : $result
*/
function CurlPost($post_url, $post_data=array(), $post_referer="") {
// check data
if (func_num_args() == 0) {
return false;
}
if ($post_url == "" || $post_url == null) {
return false;
}
if (!is_array($post_data)) {
return false;
}

// building post string
$post_string = "";
foreach($post_data as $key=>$value) {
$post_string .= "$key=" . urlencode($value) . "&";
}
$post_string = substr($post_string, 0, -1);

// building curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
if (isset($post_referer) && $post_referer != "") curl_setopt($ch, CURLOPT_REFERER, $post_referer);
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
$result = curl_exec($ch);
curl_close($ch);

return $result;
}
?>[/code]

test.php

[code] echo "

";
print_r($_POST);
echo "

";
?>[/code]

建议大家测试一下,这样就可以看出两种方式有什么区别呢?
代码来自:http://www.wavemood.net/postdata_in_phpfile.html

目前还没有任何评论.