ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP 发送http请求

2021-07-23 02:31:06  阅读:124  来源: 互联网

标签:Info http socket get URL request 发送 PHP data


PHP发送HTTP请求的6种方法

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

<?php
$url = 'https://wenda.shukaiming.com/';
echo file_get_contents($url);
?>

    1
    2
    3
    4

    方法2: 用fopen打开url, 以get方式获取内容:

<?php
//r标识read,即标识只读
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while (!feof($fp)) {
    $body.= fgets($fp, 1024);
}
echo $body;
fclose($fp);
?>

    方法3:用 file_get_contents函数,以post方式获取url

<?php
$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) . '\r\n', 'content' => $data));
$context = stream_context_create($opts);
$html = file_get_contents('https://wenda.shukaming.com', false, $context);
echo $html;
?>


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

<?php
function get_url($url, $cookie = false) {
    $url = parse_url($url);
    $query = $url[path] . ” ? ” . $url[query];
    echo $query;
    $fp = fsockopen($url[host], $url[port] ? $url[port] : 80, $errno, $errstr, 30);
    if (!$fp) {
        return false;
    } else {
        $request = "GET $query HTTP/1.1\r\n";
        $request.= "Host: $url[host]\r\n";
        $request.= "Connection: Close\r\n";
        if ($cookie) $request.= "Cookie:  $cookien";
        $request.= "\r\n";
        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

<?php
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.1\n";
    $request.= "Host: " . $URL_Info["host"] . "\n";
    $request.= "Referer: $referer\n";
    $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扩展

<?php
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, 'http://wenda.shukaiming.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>
<?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);
<?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);
/**
 * 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;
}

 

方法1: 用 file_get_contents 以get方式获取内容:
<?php$url = 'https://wenda.shukaiming.com/';echo file_get_contents($url);?>
    1    2    3    4
    方法2: 用fopen打开url, 以get方式获取内容:
<?php//r标识read,即标识只读$fp = fopen($url, 'r');stream_get_meta_data($fp);while (!feof($fp)) {    $body.= fgets($fp, 1024);}echo $body;fclose($fp);?>
    方法3:用 file_get_contents函数,以post方式获取url
<?php$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) . '\r\n', 'content' => $data));$context = stream_context_create($opts);$html = file_get_contents('https://wenda.shukaming.com', false, $context);echo $html;?>

    方法4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启
<?phpfunction get_url($url, $cookie = false) {    $url = parse_url($url);    $query = $url[path] . ” ? ” . $url[query];    echo $query;    $fp = fsockopen($url[host], $url[port] ? $url[port] : 80, $errno, $errstr, 30);    if (!$fp) {        return false;    } else {        $request = "GET $query HTTP/1.1\r\n";        $request.= "Host: $url[host]\r\n";        $request.= "Connection: Close\r\n";        if ($cookie) $request.= "Cookie:  $cookien";        $request.= "\r\n";        fwrite($fp, $request);        while (!@feof($fp)) {            $result.= @fgets($fp, 1024);        }        fclose($fp);        return $result;    }}//获取url的html部分,去掉headerfunction 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
<?phpfunction 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.1\n";    $request.= "Host: " . $URL_Info["host"] . "\n";    $request.= "Referer: $referer\n";    $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扩展
<?php$ch = curl_init();$timeout = 5;curl_setopt($ch, CURLOPT_URL, 'http://wenda.shukaiming.com');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$file_contents = curl_exec($ch);curl_close($ch);echo $file_contents;?>

标签:Info,http,socket,get,URL,request,发送,PHP,data
来源: https://www.cnblogs.com/superj/p/15047182.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有