当前位置: 首页 > 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对话的

http://www.lryc.cn/news/324692.html

相关文章:

  • 【Web】NKCTF 2024 个人wp(部分)
  • QT常见布局器使用
  • 政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍
  • 宝石与石头
  • 【Vue3之computed属性(四)】
  • 生产力工具|安装更新R软件(R、studio)
  • ffmpeg实现媒体流解码
  • 面试题 之 react
  • k8s笔记27--快速了解 k8s pod和cgroup的关系
  • android Fragment 生命周期 方法调用顺序
  • python写爬虫爬取京东商品信息
  • 使用Linux别名简化命令输入
  • 34.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-登录数据包的监视与模拟
  • rust - 对文件夹进行zip压缩加密
  • ETL数据倾斜与资源优化
  • Python的asyncio:异步编程的利器
  • nodejs+vue高校奖助学金系统python-flask-django-php
  • 已解决redis.clients.jedis.exceptions.JedisMovedDataException异常的正确解决方法,亲测有效!!!
  • 政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化
  • nodejs+vue高校会议室预订管理系统python-flask-django-php
  • 文件夹读取不到文件:深度解析与高效恢复策略
  • python—接口编写部分
  • 手机IP地址如何更换
  • 【R包开发:包的组件】 第4章 包的元数据
  • Office办公软件之word的使用(一)
  • OpenGL+QT实现矢量和影像的叠加绘制
  • vue基础——java程序员版(vuex)
  • ubuntu20.04安装 ffmpeg 开发环境
  • 微软开源Garnet高性能缓存服务安装
  • 云计算系统管理(ADMIN)