首页 热点资讯 义务教育 高等教育 出国留学 考研考公

php实现httpRequest的方法

发布网友

我来回答

2个回答

懂视网

PHP发起HTTP请求方式有:

  • curl仍然是最好的HTTP库,没有之一。 可以解决任何复杂的应用场景中的HTTP 请求;

  • 文件流式的HTTP请求比较适合处理简单的HTTP POST/GET请求,但不适用于复杂的HTTP请求;

  • PECL_HTTP扩展写代码更加简洁,省事, 但成熟度不好,编程接口不统一,文档和实例匮乏。

  • 相关学习推荐:PHP编程从入门到精通

    1、file_get_contents发送get请求

    <?php
    /**
     * 发送post请求
     * @param string $url 请求地址
     * @param array $post_data post键值对数据
     * @return string
     */
    function send_post($url, $post_data) {
     $postdata = http_build_query($post_data);
     $options = array(
     'http' => array(
      'method' => 'POST',
      'header' => 'Content-type:application/x-www-form-urlencoded',
      'content' => $postdata,
      'timeout' => 15 * 60 // 超时时间(单位:s)
     )
     );
     $context = stream_context_create($options);
     $result = file_get_contents($url, false, $context);
     return $result;
    }
    $post_data = array(
    'username' => 'abcdef',
    'password' => '123456'
    );
    send_post('http://xxx.com', $post_data);

    2、通过CURL发送get请求

    <?php
    $ch=curl_init('http://www.xxx.com/xx.html');
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
    $output=curl_exec($ch);
    $fh=fopen("out.html",'w');
    fwrite($fh,$output);
    fclose($fh);

    3、通过fsocket发送get请求

    /**
     * Socket版本
     * 使用方法:
     * $post_string = "app=socket&version=beta";
     * request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
     */
    function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {
    $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
    if (!$socket) die("$errstr($errno)");
    fwrite($socket, "POST $remote_path HTTP/1.0");
    fwrite($socket, "User-Agent: Socket Example");
    fwrite($socket, "HOST: $remote_server");
    fwrite($socket, "Content-type: application/x-www-form-urlencoded");
    fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");
    fwrite($socket, "Accept:*/*");
    fwrite($socket, "");
    fwrite($socket, "mypost=$post_string");
    fwrite($socket, "");
    $header = "";
    while ($str = trim(fgets($socket, 4096))) {
    $header .= $str;
    }
    $data = "";
    while (!feof($socket)) {
    $data .= fgets($socket, 4096);
    }
    return $data;
    }

    热心网友

    这篇文章主要介绍了php实现httpRequest的方法,涉及php操作http的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    本文实例讲述了php实现httpRequest的方法。分享给大家供大家参考。具体如下:
    想从学校图书馆的网站上抓取数据处理之后在返回给浏览器,试了不少方法。首先试了http_request(),但是这个学院pecl_http支持,后来又试了网上流传甚广的class
    HttpRequest,可能是我不会使用,也失败了。后来看到了函数httpRequest($url,
    $post='',
    $method='GET',
    $limit=0,
    $returnHeader=FALSE,
    $cookie='',
    $bysocket=FALSE,
    $ip='',
    $timeout=15,
    $block=TRUE),用它成功了,因此贴出来分享一下。函数代码如下:
    代码如下:
    <?php
    /**
    *
    Respose
    A
    Http
    Request
    *
    *
    @param
    string
    $url
    *
    @param
    array
    $post
    *
    @param
    string
    $method
    *
    @param
    bool
    $returnHeader
    *
    @param
    string
    $cookie
    *
    @param
    bool
    $bysocket
    *
    @param
    string
    $ip
    *
    @param
    integer
    $timeout
    *
    @param
    bool
    $block
    *
    @return
    string
    Response
    */
    function
    httpRequest($url,$post='',$method='GET',$limit=0,$returnHeader=FALSE,$cookie='',$bysocket=FALSE,$ip='',$timeout=15,$block=TRUE)
    {
    $return
    =
    '';
    $matches
    =
    parse_url($url);
    !isset($matches['host'])
    &&
    $matches['host']
    =
    '';
    !isset($matches['path'])
    &&
    $matches['path']
    =
    '';
    !isset($matches['query'])
    &&
    $matches['query']
    =
    '';
    !isset($matches['port'])
    &&
    $matches['port']
    =
    '';
    $host
    =
    $matches['host'];
    $path
    =
    $matches['path']
    ?
    $matches['path'].($matches['query']
    ?
    '?'.$matches['query']
    :
    '')
    :
    '/';
    $port
    =
    !empty($matches['port'])
    ?
    $matches['port']
    :
    80;
    if(strtolower($method)
    ==
    'post')
    {
    $post
    =
    (is_array($post)
    and
    !empty($post))
    ?
    http_build_query($post)
    :
    $post;
    $out
    =
    "POST
    $path
    HTTP/1.0rn";
    $out
    .=
    "Accept:
    */*rn";
    //$out
    .=
    "Referer:
    $boarrlrn";
    $out
    .=
    "Accept-Language:
    zh-cnrn";
    $out
    .=
    "Content-Type:
    application/x-www-form-urlencodedrn";
    $out
    .=
    "User-Agent:
    $_SERVER[HTTP_USER_AGENT]rn";
    $out
    .=
    "Host:
    $hostrn";
    $out
    .=
    'Content-Length:
    '.strlen($post)."rn";
    $out
    .=
    "Connection:
    Closern";
    $out
    .=
    "Cache-Control:
    no-cachern";
    $out
    .=
    "Cookie:
    $cookiernrn";
    $out
    .=
    $post;
    }
    else
    {
    $out
    =
    "GET
    $path
    HTTP/1.0rn";
    $out
    .=
    "Accept:
    */*rn";
    //$out
    .=
    "Referer:
    $boarrlrn";
    $out
    .=
    "Accept-Language:
    zh-cnrn";
    $out
    .=
    "User-Agent:
    $_SERVER[HTTP_USER_AGENT]rn";
    $out
    .=
    "Host:
    $hostrn";
    $out
    .=
    "Connection:
    Closern";
    $out
    .=
    "Cookie:
    $cookiernrn";
    }
    $fp
    =
    fsockopen(($ip
    ?
    $ip
    :
    $host),
    $port,
    $errno,
    $errstr,
    $timeout);
    if(!$fp)
    return
    '';
    else
    {
    $header
    =
    $content
    =
    '';
    stream_set_blocking($fp,
    $block);
    stream_set_timeout($fp,
    $timeout);
    fwrite($fp,
    $out);
    $status
    =
    stream_get_meta_data($fp);
    if(!$status['timed_out'])
    {//未超时
    while
    (!feof($fp))
    {
    $header
    .=
    $h
    =
    fgets($fp);
    if($h
    &&
    ($h
    ==
    "rn"
    ||
    $h
    ==
    "n"))
    break;
    }
    $stop
    =
    false;
    while(!feof($fp)
    &&
    !$stop)
    {
    $data
    =
    fread($fp,
    ($limit
    ==
    0
    ||
    $limit
    >
    8192
    ?
    8192
    :
    $limit));
    $content
    .=
    $data;
    if($limit)
    {
    $limit
    -=
    strlen($data);
    $stop
    =
    $limit
    <=
    0;
    }
    }
    }
    fclose($fp);
    return
    $returnHeader
    ?
    array($header,$content)
    :
    $content;
    }
    }
    ?>

    调用也很简单的。简单的例子:
    代码如下:
    echo
    httpRequest('http://www.baidu.com');

    希望本文所述对大家的php程序设计有所帮助。

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com