广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP实现网络请求的方法总结
  • 414
分享到

PHP实现网络请求的方法总结

2024-04-02 19:04:59 414人浏览 薄情痞子
摘要

一、分析php发送网网络请求的方法 对于PHP发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_co

一、分析php发送网网络请求的方法

对于PHP发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_contents只能完成一些间单的网络请求,稍复杂的就无法完成,例如文件上传,cookies,验证,表单提交等,用php的curl可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, Http, https, GoPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等,所以我们在开发中尽量用curl发网络请求,无论是简单还是复杂

二、file_get_contents发送网络请求示例

file_get_contents(path,include_path,context,start,max_length)

一般用file_get_contents或者fopen, file , readfile等函数读取url的时候 会创建一个$http_response_header变量保存HTTP响应的报头,使用fopen等函数打开的数据流信息可以用stream_get_meta_data获取

$html = file_get_contents('http://www.baidu.com');
print_r($http_response_header);
$fp = fopen('http://www.baidu.com', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);

摸拟post请求:

$url = 'http://192.168.1.1/test.php';
$data = array(
    'keyWord' => 'test data',
);
$content = http_build_query($data);
$content_length = strlen($content);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' =>
        "Content-type: application/x-www-fORM-urlencoded\r\n" .
        "Content-length: $content_length\r\n",
        'content' => $content
    )
);
echo file_get_contents($url, false, stream_context_create($options));

三、php 用curl发送网络请求

curl可以支持https认证、http post、ftp上传、代理、cookies、简单口令认证等等功能,使用前需要先在你的PHP环境中安装和启用curl模块,这里有两种写法供大家参考:

<?php
function geturl($url){
        $headerArray =array("Content-type:application/JSON;","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output,true);
        return $output;
}
 
 
function posturl($url,$data){
        $data  = json_encode($data);    
        $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
}
 
 
function puturl($url,$data){
    $data = json_encode($data);
    $ch = curl_init(); //初始化CURL句柄 
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT"); //设置请求方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output,true);
}
 
function delurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$put_url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");   
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output,true);
}
 
function patchurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");  
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     //20170611修改接口,用/id的方式传递,直接写在url中了
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output);
    return $output;
}
?>

一个函数片时各种请求:

function sendCurl($url, $data = null,$method='POST')
{
    $method=strtoupper($method);
    $start_wdmcurl_time = microtime(true);
 
    $header = array(' application/x-www-form-urlencoded');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    // https 请求
    if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https")
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    if($method=='GET'){
        if($data && is_array($data) && count($data)>0 ){
            $url.="?".http_build_query($data);
        }
        curl_setopt($ch, CURLOPT_URL, $url);
    }elseif($method=='POST'){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        if (is_array($data) && count($data)>0)
        {
            curl_setopt($ch, CURLOPT_POST, true);
            $isPostMultipart = false;
            foreach ($data as $k => $v)
            {
                if ('@' == substr($v, 0, 1))
                {
                    $isPostMultipart = true;
                    break;
                }
            }
            unset($k, $v);
            if ($isPostMultipart) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
            }
        }
    }elseif(in_array($method,['PUT','DELETE','PATCH'])){
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    $reponse = curl_exec($ch);
    curl_close($ch);
    return $reponse;
}

四、使用php composer的扩展guzzlehttp

composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.GitHub.com/repos/guzzle/guzzle');
 
echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
 
// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});
 
$promise->wait();

日常开发中我们尽量用方法三,自定义用curl处理网络请求,或用composer的guzzlehttp扩展库,有起来也很方便。

以上就是PHP实现网络请求的方法总结的详细内容,更多关于PHP网络请求的资料请关注编程网其它相关文章!

--结束END--

本文标题: PHP实现网络请求的方法总结

本文链接: https://www.lsjlt.com/news/152771.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP实现网络请求的方法总结
    一、分析php发送网网络请求的方法 对于php发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_co...
    99+
    2022-11-13
  • Android实现网络请求方法
    Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。 ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之妙,但是安卓软件毕竟的安装在我们手机上的...
    99+
    2023-08-19
    android java jvm
  • Kotlin结合Rxjava+Retrofit实现极简网络请求的方法
    前言因为最近正在写的项目集成了两个网络请求框架(Volley and Retrofit)对比之下也是选择了Retrofit。既然选择那自然要让自己以后开发更加省力(就是懒)。于是我在Retrofit中加入了Rxjava,这也是当下蛮流行的一...
    99+
    2023-05-30
    retrofit rxjava kotlin
  • PHP如何实现网络请求
    这篇“PHP如何实现网络请求”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP如何实现网络请求”文章吧。一、分析php发送...
    99+
    2023-07-02
  • Go语言实现请求超时处理的方法总结
    目录1. 简介2. 问题引入3. timer的实现方案3.1 timer的基本介绍3.2 timer实现超时控制3.3 对问题的解决4.timetCtx的实现方案4.1 timerC...
    99+
    2023-05-18
    Go语言请求超时处理方法 Go语言 超时处理方法 Go语言 超时处理
  • Java 实现HTTP请求的四种方式总结
    前言 在日常工作和学习中,有很多地方都需要发送HTTP请求,本文以Java为例,总结发送HTTP请求的多种方式 HTTP请求实现过程 GET ▶️①、创建远程连接 ▶️②、设置连接方式(get、post、put…) ▶️③、设置连接超时...
    99+
    2023-08-17
    java http restful
  • php发送get、post请求的6种方法简明总结
    1. 使用原生的PHP函数发送GET请求:```php$data = array('param1' => 'value1','par...
    99+
    2023-08-16
    php
  • jquery实现Ajax请求的几种常见方式总结
    在jQuery中,可以使用以下几种方式实现Ajax请求:1. 使用$.ajax()方法:这是最常见和最灵活的方式。可以通过设置不同的...
    99+
    2023-08-14
    JQuery
  • Go语言实现关闭http请求的方式总结
    目录写在前面方式一:设置请求变量的 Close 字段值为 true方式二:设置 Header 请求头部选项 Connection: close方式三:自定义配置的 HTTP tran...
    99+
    2023-02-26
    Go关闭http请求 Go关闭http Go http
  • JS实现网络请求的方式有哪些
    这篇文章将为大家详细讲解有关JS实现网络请求的方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一系...
    99+
    2023-06-29
  • JS实现网络请求的三种方式梳理
    目录背景前言XMLHttpRequestPromiseasync/await结语背景 为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一...
    99+
    2022-11-13
  • Vue网络请求的三种实现方式介绍
    目录1.XMLHttpRequest发送请求2.fetch发送请求3.axios请求库(Vue中推荐写法)模拟发送get和post请求网络请求时发送用户认证信息请求拦截器响应拦截器用...
    99+
    2022-11-13
  • shell中的curl网络请求的实现
    目录一、curl的作用:二、实例三、相关链接shell中的curl网络请求的实现curl 是利用URL语法在命令行下工作的文件传输工具,1997年首次发行,支持文件上传和下载,结合shell脚本体验更棒。但按照传统习惯称...
    99+
    2022-06-05
    shellcurl网络请求
  • Android HTTP网络请求的异步实现
    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个...
    99+
    2022-06-06
    HTTP 异步 Android
  • JavaScript网络请求与远程资源的方法
    今天小编给大家分享一下JavaScript网络请求与远程资源的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2022-10-19
  • 总结三种常见php算法的实现方法
    PHP是一种强大的脚本语言,它在Web开发领域中广泛应用。除了在网站开发中使用,PHP还可以用于实现各种算法和数据结构。在本文中,我们将介绍三个常见的算法,包括冒泡排序、快速排序和二分查找,以及在PHP中如何实现它们。一、冒泡排序冒泡排序是...
    99+
    2023-05-14
  • C语言实现求解素数的N种方法总结
    目录前言必备小知识C语言详解《试除法》求解素数试除法境界1试除法境界2试除法境界3试除法境界4C语言详解《筛选法》求解素数筛选法境界5前言 哈喽各位友友们,我今天又学到了很多有趣的知...
    99+
    2023-01-28
    C语言实现求解素数 C语言求解素数 C语言 素数
  • python包中的urllib网络请求怎么实现
    这篇文章主要讲解了“python包中的urllib网络请求怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python包中的urllib网络请求怎么实现”吧!一、简介是一个 pytho...
    99+
    2023-06-30
  • PHP Linux脚本编程实战:实现网络请求与处理
    概述:在现代互联网时代,网络请求与处理变得越来越重要。而通过使用PHP和Linux脚本编程,我们可以实现各种网络请求操作,如HTTP请求、FTP传输等,并对返回的数据进行处理,实现各种功能和需求。本文将介绍如何使用PHP和Linux脚本编程...
    99+
    2023-10-21
    Linux PHP 实战
  • Flutter 将Dio请求转发原生网络库的实现方案
    目录背景实现方案实现步骤交互协议注意点背景 首先看到标题,相信大家已经血压飙升了,既然都用了Flutter,怎么还用原生的网络库呢?这不是多此一举么。emmmmm,当我看到这个需求的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作