29 07年04月

php 模拟POST提交的2种方法

关键字:
贝贝爸 发表在 技术文章 |

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

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

Snoopy 类(2)
sourceforge.net/projects/snoopy/
http://www.redalt.com/xref/trunk/nav.htm?wp-includes/class-snoopy.php.htm
HTTP类(1,2)
http://www.phpclasses.org/browse/download/1/file/5/name/http.php
PEAR HTTP_Request
http://pear.php.net/package/HTTP_Request

相关文章

“php 模拟POST提交的2种方法”8个评论

请添加你的评论!您的观点很重要,来吧,让贝贝知道你想的是啥。

  1. 1 On 2007年06月26 18:36, arhatx说:

    你好,请问下第一种方法执行之后会直接返回post之后的网页么?我试了下,好像没有反映,郁闷。

  2. 2 On 2007年06月26 20:47, 贝贝爸说:

    没问题的,你的程序怎么写的?有抱错么?你什么平台,有装curl么?

  3. 3 On 2008年01月8 11:50, 阿政说:

    你好…我看到了你那頁用php去模擬form送值的文章..
    我使用了裡面的程式碼去讀取大部分的網站驗證都行..
    不過目前有一個網站..
    http://w5.web3go.com.tw 就沒辦法了..
    可以請教一下這要如何用curl去模擬呢?
    謝謝..

  4. 4 On 2008年01月8 16:57, 贝贝爸说:

    为什么?有报错?有什么输出?

  5. 5 On 2008年01月8 22:26, 阿政说:

    就是完全沒有報錯..
    所以才麻煩..根本不知道從何下手 ^^”

  6. 6 On 2008年01月9 8:43, 贝贝爸说:

    post_data需要如下数据,你都填写了么?post的目标url也对么?
    autologin on
    login
    password test121121
    redirect eula.php
    username test121121

  7. 7 On 2008年07月11 16:55, 海风说:

    我把登录数据提交过去了,网站跳页,我怎么记录他的在线信息

  8. 8 On 2008年07月11 18:02, 贝贝爸说:

    这个只是post,要登录的状态,要支持cookie。
    可以参考这个
    http://www.juyimeng.com/python-simulate-login-with-post-and-examine-the-result.html

发表评论

美体小铺急救棒 the bodyshop body shop 美体小铺茶树精油 美体小铺接骨木花眼胶 美体小铺VE眼霜
15Q.0.644Ss.