PHP 直接POST数据

做模拟登陆或者后台任务的时候,可能会需要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.

发布者

下弦 古月

有时候我们以为爱可以改变一切,但有些东西是无法改变的,就像那些溶入了生命的颜色。

发表回复