zoukankan      html  css  js  c++  java
  • PHP:6种GET和POST请求发送方法

    i94web博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全。

    无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库。对于多说,请求的格式如下:

    // 获取评论次数,参数是文章ID
    function getCommCount($postid)
    {
        $jsondata = file_get_contents("http://api.duoshuo.com/threads/counts.json?short_name=i94web&threads=$postid");
        // 设置true返回数组,不设置或者是false则返回对象
        $resjson= json_decode($jsondata,true);
        return $resjson['response'][$postid]['comments'];
    }

     

    对于远程请求,有很多种方法。今天,LZ就搜罗了六种,供大家参考。

    1、用file_get_contents 以get方式获取内容:

    <?php
    $url='http://www.ido321.com/';
    $html = file_get_contents($url);
    echo $html;
    ?>

     

       2、用fopen打开url,用get方式获取

    $fp = fopen($url, 'r');
    stream_get_meta_data($fp);
    while(!feof($fp)) {
    $result .= fgets($fp, 1024);
    }
    echo "url body: $result";
    fclose($fp);

     

     

    3、用file_get_contents 以post方式获取内容:

    $data = array ('foo' => 'bar');
    $data = http_build_query($data);
     
    $opts = array (
    'http' => array (
    'method' => 'POST',
    'header'=> "Content-type: application/x-www-form-urlencodedrn" .
    'Content-Length: ' . strlen($data) . 'rn',
    'content' => $data
    )
    );
     
    $context = stream_context_create($opts);
    $html = file_get_contents('http://localhost/e/admin/test.html', false, $context);
     
    echo $html;

     

     

        4、用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启

    function get_url ($url,$cookie=false)
    {
    $url = parse_url($url);
    $query = $url[path].'?'.$url[query];
    echo 'Query:'.$query;
    $fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
    if (!$fp) {
    return false;
    } else {
    $request = 'GET $query HTTP/1.1rn';
    $request .= 'Host: $url[host]rn';
    $request .= 'Connection: Closern';
    if($cookie) $request.='Cookie:  $cookien';
    $request.='rn';
    fwrite($fp,$request);
    while(!@feof($fp)) {
    $result .= @fgets($fp, 1024);
    }
    fclose($fp);
    return $result;
    }
    }
    //获取url的html部分,去掉header
    function GetUrlHTML($url,$cookie=false)
    {
    $rowdata = get_url($url,$cookie);
    if($rowdata)
    {
    $body= stristr($rowdata,'rnrn');
    $body=substr($body,4,strlen($body));
    return $body;
    }
     
    return false;
    }

     

     

         5、用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

    function HTTP_Post($URL,$data,$cookie, $referrer='')
    {
     
    // parsing the given URL
    $URL_Info=parse_url($URL);
     
    // Building referrer
    if($referrer=='') // if not given use this script as referrer
    $referrer='111';
     
    // making string from $data
    foreach($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.1n";
    $request.="Host: ".$URL_Info['host']."n";
    $request.="Referer: $referern";
    $request.="Content-type: application/x-www-form-urlencodedn";
    $request.='Content-length: '.strlen($data_string)."n";
    $request.='Connection: closen';
     
    $request.='Cookie:  $cookien';
     
    $request.='n';
    $request.=$data_string.'n';
     
    $fp = fsockopen($URL_Info['host'],$URL_Info['port']);
    fputs($fp, $request);
    while(!feof($fp)) {
    $result .= fgets($fp, 1024);
    }
    fclose($fp);
     
    return $result;
    }

     

     

        6、使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展

    $ch = curl_init();
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, ‘http://www.ido321.com/');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
     
    echo $file_contents;

     


  • 相关阅读:
    [BZOJ1211]:[HNOI2004]树的计数(prufer序列)
    [CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)
    [CSP-S模拟测试]:那一天我们许下约定(DP+组合数学)
    BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】
    BZOJ3124 [Sdoi2013]直径 【树的直径】
    BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】
    BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】
    BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】
    洛谷P2351 [SDOi2012]吊灯 【数学】
    BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】
  • 原文地址:https://www.cnblogs.com/ido321/p/4140969.html
Copyright © 2011-2022 走看看