做模拟登陆或者后台任务的时候,可能会需要php在后台直接post数据到其他页面,并且获取返回结果来进行下一步处理.可能比较常用的是curl,不过在一些简单的地方使用,感觉有些麻烦,一个post要一大堆代码…
善用搜索引擎,发现了一个比较简单的post数据的方式,封装成一个函数方便调用.
function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => array( 'method' => 'POST', 'content' => $data )); if ($optional_headers !== null) { $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $url, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; }
调用方法:
do_post_request($url,$data,$headers); //第一个参数写post的对象,需要写绝对地址,例如"http://www.devsk.com" //第二个参数写要post的数据,例如"a=1&b=2",目标页面$_POST['a']的值就是1,$_POST['b']的值就是2 //第三个参数可以不填,如果需要设置header,则可以在第三个参数输入,比如要传递cookie,可以写"Cookie:ID=123" //函数返回值就是目标页面的输出 //完整的调用实例: $result = do_post_request("http://www.devsk.com","a=1&b=2","Cookie:ID=123"); //向http://www.devsk.com页面post数据,包含两个变量(a=1 b=2)和一个cookie (ID=123).最后http://www.devsk.com页面的输出赋值给变量$result.