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对话的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARXIV2402】MambaIR

这个工作首次将 Mamba 引入到图像修复任务,关于为什么 Mamba 可以用于图像修复,作者有非常详细的解释:一路向北:性能超越SwinIR!MambaIR: 基于Mamba的图像复原基准模型 作者认为Mamba可以理解为RNN和CNN的结合&#xf…

Transformer模型

Transformer模型简介 Transformer模型自从2017年被提出以来,就以其优异的性能在自然语言处理(NLP)领域取得了巨大成功。它的设计哲学是完全基于自注意力机制(Self-Attention Mechanism),这使得模型能够在处理序列数据时&#xff…

【测试开发学习历程】计算机编程语言

前言: 学习完数据库,我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类, 在这之后,我们会以Python为重点, 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…

如何使用break和continue语句控制循环流程?

一、如何使用break和continue语句控制循环流程? 在编程中,break和continue是两个非常重要的控制流语句,它们可以帮助我们更精细地控制循环的执行流程。 break语句 break语句用于立即终止最内层的循环。无论是for循环还是while循环&#xf…

JAVA 学习记录(1)

1.函数 (1)String.join(";", messages); ";" 表示分隔符,输出的结果: message; (2) Double.parseDouble(valueString); 它返回由字符串参数表示的双精度值。 (3) Double.valueOf((Float) value; float 类型的数值转化为double类…

计数组合【2024蓝桥杯0基础】-学习笔记

文章目录 计数原理排列数组合数组合数性质例题分析代码复现 例题2状态分析代码复现 常见的排列组合问题圆排列代码复现 第二类斯特林数 感悟 计数原理 排列数 组合数 组合数性质 例题分析 代码复现 def ksm(a, b, c):ans 1%cwhile b ! 0:if b % 2 0:ans ans * a %ca a * …

java面向对象编程基础

对象: java程序中的对象: 本质上是一种特殊的数据结构 对象是由类new出来的,有了类就可以创建对象 对象在计算机的执行原理: student s1new student();每次new student(),就是在堆内存中开辟一块内存区域代表一个学生对象s1变…

力扣74---合并区间

题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 示例 1: 输入&#xff1…

K3 计划订单投放时,将“关联物料”传递到采购和生产订单的“组部件”字段

参考K/3 WISE 中MRP计算投放过程中 销售订单自定义字段怎么携带到任务单这篇文章,进行优化。 在表ICMrpDestBills下增加触发器,代码如下 CREATE TRIGGER [dbo].[ICMrpDestBills_update]ON [dbo].[ICMrpDestBills]AFTER INSERT,UPDATE AS BEGINSET NO…

I/O 多路复用是什么

核心概念: 批量提交,主动询问。 共用一个Selector的选择器概念。 I/O 多路复用 基本概念 Socket 套接字。对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 例子:客户端将数据通过网线发送到服务端,客户端发送数据需…

【暴刷力扣】283. 移动零

283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…

谈论一些代码实现的逻辑(四)

谈论一些代码实现的逻辑(四) 文章目录 前言1. 登录功能2. 悬浮框功能3. markdown编辑器和富文本编辑器的共同集成4. 工具库的类别的分类5. 在flask中引入echarts图表6. 聊天室的实现总结 前言 上一篇博客介绍了项目的目录结构,已经有了一点对…

查询正在运行的Top SQL的脚本(建议收藏)

这篇文章提供了一些现成的SQL脚本,通过查询V$SQLSTATS视图找到正在运行的TOP SQL,用于后续的优化。建议大家收藏,需要查询TOP SQL时直接复制和粘贴即可。 之前的一篇文章解释了为什么要使用V$SQLSTATS视图。 当数据库表现出各种不同的性能问…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类…

Docker数据卷与网络模式

华子目录 数据卷注意数据卷操作查看镜像,容器,数据卷所占空间 Docker的网络模式查看指定容器的网络模式bridge模式none模式host模式container模式 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有…

Open CASCADE学习|显示文本

目录 1、修改代码 Viewer.h: Viewer.cpp: 2、显示文本 OpenCasCade 你好啊 霜吹花落 1、修改代码 在文章《Open CASCADE学习|显示模型》基础上,增加部分代码,实现对文本显示的支持,具体如下: Viewer…

从数据页的角度看 B+ 树

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 大家背八股文的时候,都知道 MySQL 里 InnoDB 存储引擎是采用 B 树来组织数据的。 这点没错,但是大家知道 B 树里的节点里存放的是什么呢?查询数据的过程又是怎样的&am…

Spark 集群管理器

Spark 集群管理器 Spark最主要资源管理方式按排名为Hadoop Yarn, Apache Standalone 和Mesos。在单机使用时,Spark还可以采用最基本的local模式。 目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN&#xff…

云安全与云计算的关系

云计算又被称为网格计算,是分布式计算的一种,能够将大量的数据计算处理程序通过网络“云”分解成多个小程序,然后将这些小程序的结果反馈给用户。云计算主要就是能够解决任务分发,并进行计算结果的合并。 云安全则是我国企业创造的…

填补市场空白,Apache TsFile 如何重新定义时序数据管理

欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年,国产开源技术再次获得国际认可。 2023 年 11 月 15 日,经全球最大的开源软件基金会 ASF 董事会投票决议,时序数据文件格式 TsFile 正式通过,直接晋升为 Apache T…