当前位置: 首页 > news >正文

PHP之CURL和Socket

文章目录

  • 一、CURL
    • 1.基本流程
      • (1)初始化
      • (2)向服务器发送请求
      • (3)向服务器发送请求
      • (4)关闭curl
    • 2.CURLOPT参数
    • 记得写一个文件curl上传的例子
    • 记得写一个json上传的例子
    • 3.CURL批处理
  • 二、Socket
    • 1.基本流程
      • (1)创建socket句柄
      • (2)其他
    • 记得写一个socket对话的

一、CURL

1.基本流程

(1)初始化

  • $ch = curl_init():初始化curl,生成curl句柄

(2)向服务器发送请求

  • curl_setopt($ch, $option, $value):设置变量
    参数:$ch:curl句柄; $option:需要设置的CURLOPT_XXX选项; $value:将设置再option选项上的值

(3)向服务器发送请求

  • curl_exec($ch):执行curl,并获取结果

(4)关闭curl

  • curl_close($ch):关闭并释放curl句柄
$curlobj = curl_init();
curl_seropt($curlobj, CURLOPT_URL, 'http://www.yyfs.com');	//设置要访问的url
curl_seropt($curlobj, CURLOPT_RETURNTRANSFER, 1);			//执行之后不打印
//…… …… 其他众多参数 …… ……
$output = curl_exec($curlobj);		//执行,可获取内容
if(!curl_errno($curlobj)){echo $output;
}else{echo 'curl error:'.curl_error($curlobj);
}
curl_close($curlobj);

2.CURLOPT参数

  • CURLOPT_URL:请求的地址
  • CURLOPT_RETURNTRANSFER:将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
  • CURLOPT_HEADER:启用时会将头文件的信息作为数据流输出
  • CURLOPT_POST:启用时会发送一个常规的POST请求,类型为application/x-www-form-urlencoded,就像表单提交的一样
  • CURLOPT_POSTFIELDS:全部数据使用HTTP协议中的POST操作来发送,要发送文件,则需要在文件名前面加上@前缀并使用完整的路径,如果value是一个数组,则Content-Type头将会被设置成multipart/form-data
  • CURLOPT_CONNECTTIMEOUT:设置一个最长的连接时间,单位为秒
    .
    .
    .

记得写一个文件curl上传的例子

记得写一个json上传的例子

curl_setopt($ch,.CURLOPT_HTTPHEADER,[‘Content-Type:application/json’,‘Content-Length:’ . strlen($data)])

3.CURL批处理

  • curl_multi_init:返回一个新cURL批处理句柄
  • curl_multi_close:关闭一组cURL句柄
  • curl_multi_add/remove_handle:向curl批处理会话中添加/剔除单独的curl句柄
  • curl_multi_exec($mh, &$still_running ) :运行当前 cURL 句柄的子连接,$still_running:用来判断操作是否仍在执行的标识的引用
  • curl_multi_select:阻塞等待所有cURL批处理中的活动连接
  • curl_multi_getcontent:如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
    curl_multi实现并发及其优化
$ch1 = curl_init();		//创建两个url资源
$ch2 = curl_init();
//…… …… 指定URL和适当的参数 …… ……
curl_seropt($ch1, CURLOPT_URL, 'http://www.yyfs.com');	//设置要访问的url
curl_seropt($ch1, CURLOPT_HEADER, 0);
curl_seropt($ch2, CURLOPT_URL, 'http://www.baidu.com');	//设置要访问的url
curl_seropt($ch2, CURLOPT_HEADER, 0);
//…… …… 其他众多参数 …… ……
$mh = curl_multi_init();		    //创建curl批处理句柄
curl_multi_add_handle($mh, $ch1);	//加上前面两个资源句柄
curl_multi_add_handle($mh, $ch2);
$actice = null; 		//预定义一个状态变量
do{$mrc = curl_multi_exec($mh, $active);			//执行批处理
}while($mrc == CURLM_CALL_MULTI_PERFORM);
while($active && $mrc == CURLM_OK){if(curl_multi_select($mh) != -1){do{$mrc = curl_multi_exec($mh, $active);	//执行批处理}while($mrc == CURLM_CALL_MULTI_PERFORM);}
}
curl_multi_remove_handle($mh, $ch1);	//关闭各个句柄
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

二、Socket

1.基本流程

(1)创建socket句柄

  • socket_create($domain, $type, $protocol ):创建socket资源句柄
  • 参数:
    1)$domain:指定socket使用的网络协议
          AF_INET:IPv4 网络协议。TCP 和 UDP 都可使用此协议
          AF_INET6:IPv6 网络协议。TCP 和 UDP 都可使用此协议
          AF_UNIX:本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)
    2)$type:用于选择socket的使用类型
         SOCK_STREAM提供一个顺序化的、可靠的、全双工的、基于连接的字节流。支持数据传送流量控制机制。TCP 协议即基于这种流式套接字
         SOCK_DGRAM提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接字
         SOCK_SEQPACKET提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包
         SOCK_RAW 提供读取原始的网络协议。这种特殊的套接字可用于手工构建任意类型的协议。一般使用这个套接字来实现 ICMP 请求(例如 ping)
         SOCK_RDM 提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能
    3)$protocol :指定domain下的具体socket协议
         SOL_TCP:TCP
         SOL_UDP:UDP
  • 返回值:正确时返回一个套接字,失败时返回 FALSE。要读取错误代码,可以调用 socket_last_error()。这个错误代码可以通过 socket_strerror() 读取文字的错误说明

(2)其他

  • socket_bind($socket, $ip, $port):给socket句柄绑定地址,$socket为socket_create创建的资源句柄
  • socket_listen($socket[, $backlog = 0]):监听外部链接,$backlog为设置请求排队的最大长度
  • $msgsocket = socket_accept($socket):接收链接请求并调用另一个子socket来处理客户与服务器间的信息
  • socket_read($msgsocket, $length):当一个链接建立后,服务器会等待客户端发送$length长度的输入信息
  • socket_write($socket, $buffer[, $length = 0 ] ):把数据写入socket中,$buffer为对应的数据,$length为数据长度
  • socket_connect($socket, $ip, $port):链接socket服务器,创建客户端
  • socket_close($msgsocket):关闭socket
  • socket_shutdown($socket[, $how = 2]):关闭一个正在读或者写的socket,$how:0读,1写,2读写
    shutdown是一种优雅地单方向或者双方向关闭socket的方法。 而close则立即双方向强制关闭socket并释放相关资源
    如果有多个进程共享一个socket,shutdown影响所有进程,而close只影响本进程
  • fsockopen($hostname[, $port = -1[, &$errno[, &$errstr[,$timeout = ini_get(“default_socket_timeout”)]]]]):打开一个网络连接或者一个Unix套接字连接
    fsockopen例子文章

记得写一个socket对话的

相关文章:

PHP之CURL和Socket

文章目录 一、CURL1.基本流程(1)初始化(2)向服务器发送请求(3)向服务器发送请求(4)关闭curl 2.CURLOPT参数记得写一个文件curl上传的例子记得写一个json上传的例子3.CURL批处理 二、…...

【Web】NKCTF 2024 个人wp(部分)

目录 my first cms 全世界最简单的CTF attack_tacooooo 属实太菜了,3/4 my first cms 一眼搜版本2.2.19 CVE -CVE-2024-27622 GitHub - capture0x/CMSMadeSimple 访问/admin/login.php 爆出弱口令,后台登录 admin Admin123 Extensions > User D…...

QT常见布局器使用

布局简介 为什么要布局?通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定,不方便后期修改和维护;在Qt里面布局分为四个大类 : 盒子布局:QBoxLayout 网格布局:QGridLayout 表单布局&am…...

政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 前言 TensorFlow Extended(TFX&a…...

宝石与石头

宝石与石头 链接:https://leetcode.cn/problems/jewels-and-stones/description/ 给你⼀个字符串 jewels 代表石头中宝石的类型,另有⼀个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了⼀种你拥有的石头的类型,你想知道你拥有的石头中有多…...

【Vue3之computed属性(四)】

文章目录 前言一、computed属性有缓存二、使用方法三、修改全名 前言 理解computed属性,实现输入姓和名得出全名并双向绑定,区分单向绑定和双向绑定。测试computed属性和方法的区别 一、computed属性有缓存 先引入computed,写箭头函数定义并…...

生产力工具|安装更新R软件(R、studio)

内容介绍: 安装R软件: 下载 R X64 3.5.1: 访问官方R网站 https://cran.r-project.org/。选择适合Windows版本的安装包。将安装包下载到您的计算机。 本地安装: 运行下载的“R-3.5.1-win.exe”文件。按照安装向导,选择安装路径,取消…...

ffmpeg实现媒体流解码

本期主要讲解怎么将MP4媒体流的视频解码为yuv,音频解码为pcm数据;在此之前我们要先了解解复用和复用的概念; 解复用:像mp4是由音频和视频组成的(其他内容流除外);将MP4的流拆分成视频流(h264或h265等)和音频流(AAC或mp3等); 复用:就是将音频和视频打包成MP4或者fl…...

面试题 之 react

1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念,更高效使用虚拟 DOM 来有效地操作 DOM ,遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…...

k8s笔记27--快速了解 k8s pod和cgroup的关系

k8s笔记27--快速了解 k8s pod和 cgroup 的关系 介绍pod & cgroup注意事项说明 介绍 随着云计算、云原生技术的成熟和广泛应用,K8S已经成为容器编排的事实标准,学习了解容器、K8S技术对于新时代的IT从业者显得极其重要了。 之前在文章 docker笔记13–…...

android Fragment 生命周期 方法调用顺序

文章目录 Introlog 及结论代码 Intro 界面设计:点击左侧按钮,会将右侧 青色的RightFragment 替换成 黄色的AnotherRightFragment,而这两个 Fragment 的生命周期方法都会打印日志。 所以只要看执行结果中的日志,就可以知道 Fragme…...

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案: 第一种方式是使用request模拟请求,并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器,selenium自动化操作无头浏览器,由无头浏览器实现请求,对得到的数据进行解析。 第一种方…...

使用Linux别名简化命令输入

Linux定义命令别名,解决经常重复输入长命令 在Linux环境下工作时,我们经常需要输入长长的命令,这不仅耗时而且容易出错。Linux提供了一种名为“别名(alias)”的功能,可以让我们为这些长命令定义简短的名称…...

34.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-登录数据包的监视与模拟

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:33.游戏登录数据…...

rust - 对文件夹进行zip压缩加密

本文提供了一种对文件夹进行zip压缩并加密的方法。 添加依赖 cargo add anyhow cargo add walkdir cargo add zip cargo add zip-extensions计算文件夹的大小 目的是对需要压缩的文件夹的大小做一个限制。当然如果资源足够的话,可以去掉此限制。 let mut total_s…...

ETL数据倾斜与资源优化

1.数据倾斜实例 数据倾斜在MapReduce编程模型中比较常见,由于key值分布不均,大量的相同key被存储分配到一个分区里,出现只有少量的机器在计算,其他机器等待的情况。主要分为JOIN数据倾斜和GROUP BY数据倾斜。 1.1GROUP BY数据倾…...

Python的asyncio:异步编程的利器

在Python中,asyncio模块为开发者提供了强大的异步编程支持,使得编写高效且并发的代码变得更加容易。本文将深入探讨asyncio的核心概念、工作原理以及如何快速入门,通过文字与代码结合,带您领略异步编程的魅力。 1. 协程与事件循环…...

nodejs+vue高校奖助学金系统python-flask-django-php

高校奖助学金系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,…...

已解决redis.clients.jedis.exceptions.JedisMovedDataException异常的正确解决方法,亲测有效!!!

已解决redis.clients.jedis.exceptions.JedisMovedDataException异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 使用JedisCluster自动处理MOVED错误 手动更新客户端缓存 总结 博主v&#xff…...

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! Dropout和批归一化是深度学习领域中常用的正则化技术…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...