当前位置: 首页 > 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和批归一化是深度学习领域中常用的正则化技术…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...