广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP如何实现网络请求
  • 206
分享到

PHP如何实现网络请求

2023-07-02 13:07:42 206人浏览 八月长安
摘要

这篇“PHP如何实现网络请求”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现网络请求”文章吧。一、分析php发送

这篇“PHP如何实现网络请求”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现网络请求”文章吧。

一、分析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)

PHP如何实现网络请求

一般用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模块,这里有两种写法供大家参考:

<?phpfunction 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(); // 200echo $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/342091.html(转载时请注明来源链接)

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

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

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

下载Word文档
猜你喜欢
  • PHP如何实现网络请求
    这篇“PHP如何实现网络请求”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP如何实现网络请求”文章吧。一、分析php发送...
    99+
    2023-07-02
  • 【iOS_Swift_Alamofire实现网络请求】
    文章目录 前言导入库原生网络请求单例封装一个原生网络请求Alamofire用法Alamofire的返回响应将返回的data转为字典/字符串 总结 前言 学习swift继续延续之前...
    99+
    2023-09-16
    swift ios 开发语言 objective-c c++
  • 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
  • Flutter Http网络请求实现详解
    Http网络请求是一门开发语言里比较常用和重要的功能,主要用于资源访问、接口数据请求和提交、上传下载文件等等操作,Http请求方式主要有:GET、POST、HEAD、PUT、DELE...
    99+
    2022-11-12
  • Android HTTP网络请求的异步实现
    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个...
    99+
    2022-06-06
    HTTP 异步 Android
  • shell中的curl网络请求的实现
    目录一、curl的作用:二、实例三、相关链接shell中的curl网络请求的实现curl 是利用URL语法在命令行下工作的文件传输工具,1997年首次发行,支持文件上传和下载,结合shell脚本体验更棒。但按照传统习惯称...
    99+
    2022-06-05
    shellcurl网络请求
  • python 包实现 urllib 网络请求操作
    目录一、简介二、发起请求三、携带参数请求四、获取响应数据五、设置headers六、使用代理七、认证登录八、设置cookie九、异常处理十、HTTP异常十一、超时异常十二、解析编码十三...
    99+
    2022-11-10
  • PHP Linux脚本编程实战:实现网络请求与处理
    概述:在现代互联网时代,网络请求与处理变得越来越重要。而通过使用PHP和Linux脚本编程,我们可以实现各种网络请求操作,如HTTP请求、FTP传输等,并对返回的数据进行处理,实现各种功能和需求。本文将介绍如何使用PHP和Linux脚本编程...
    99+
    2023-10-21
    Linux PHP 实战
  • 如何在Android中利用Retrofit与Rxjava实现网络请求
    今天就跟大家聊聊有关如何在Android中利用Retrofit与Rxjava实现网络请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先做一下准备工作,导入需要引用的文件compi...
    99+
    2023-05-31
    retrofit rxjava android
  • JS实现网络请求的方式有哪些
    这篇文章将为大家详细讲解有关JS实现网络请求的方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一系...
    99+
    2023-06-29
  • python包中的urllib网络请求怎么实现
    这篇文章主要讲解了“python包中的urllib网络请求怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python包中的urllib网络请求怎么实现”吧!一、简介是一个 pytho...
    99+
    2023-06-30
  • 微信小程序怎么实现网络请求
    这篇文章主要介绍“微信小程序怎么实现网络请求”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现网络请求”文章能帮助大家解决问题。最近微信小程序开始开放测试了,小程序提供了很多api,极...
    99+
    2023-06-26
  • php如何实现跨域请求
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。在PHP中如果我们需要实现跨域,可以通过设置Access-Control-Allow-Origin来实现。接下来我们举个例子,方便大家更好地理解。假设现在的客...
    99+
    2017-05-30
    php 跨域请求
  • 如何使用 Python 请求网络资源
    很长时间以来我们都在分享 Linux 系统相关的知识,所以可能会有朋友误以为我们只分享 Linux 操作相关的东西,其实不是啊,我们在平时开发过程中遇到的一些问题,感觉可以总结的,都有可能拿来分享。最近在写一个定时访问网络资源的程序,里面涉...
    99+
    2023-05-14
    Python 网络资源
  • 在Golang中如何进行网络请求
    Golang是一种高效的编程语言,被广泛应用于Web应用程序和网络服务开发。在网络服务中,请求是一个非常重要的部分。本文将介绍Golang中如何进行网络请求,包括GET请求和POST请求。GET请求GET请求是最常用的网络请求方法之一。它用...
    99+
    2023-05-14
  • JS实现网络请求的三种方式梳理
    目录背景前言XMLHttpRequestPromiseasync/await结语背景 为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一...
    99+
    2022-11-13
  • Vue网络请求的三种实现方式介绍
    目录1.XMLHttpRequest发送请求2.fetch发送请求3.axios请求库(Vue中推荐写法)模拟发送get和post请求网络请求时发送用户认证信息请求拦截器响应拦截器用...
    99+
    2022-11-13
  • 实现Android中的网络请求和数据解析
    在Android中,可以使用以下方法进行网络请求和数据解析: 网络请求 使用Android框架提供的HttpURLConnection或HttpClient进行网络请求。 1 HttpUrlConnection HttpURLConnect...
    99+
    2023-09-07
    android java 开发语言
  • 使用Flutter怎么实现一个Http网络请求
    这期内容当中小编将会给大家带来有关使用Flutter怎么实现一个Http网络请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Http的请求方式简介Http网络请求方式就是描述了客户端想对指定的资源...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作