PHP中使用CURL实现请求

2023-11-07

PHP建立CURL请求的基本步骤

①:初始化
curl_init()
②:设置属性

curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。

如果需要,可以设置

CURLOPT_TIMEOUT 允许 CURL 函数执行的最长秒数。

curl_setopt($curl, CURLOPT_TIMEOUT, 20);//设置curl函数最大请求时间为20秒
CURLOPT_HTTPHEADER 设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
//设置请求头信息,'Content-Type: application/json'则请求参数为json格式,
//数组里面每一个值都是一个请求头信息,注意这里是一维数组
curl_setopt ($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));

 

③:执行并获取结果
curl_exec()
④:释放句柄

curl_close()

抓取网页简单案例

(get方式实现)  

// 创建一个新cURL资源
$curl = curl_init();
// 设置URL和相应的选项
curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com/");
//CURLOPT_HEADER为true设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
// 抓取URL并把它传递给浏览器
curl_exec($curl);
//关闭cURL资源,并且释放系统资源
curl_close($curl);

或者

//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data); //把print_r换成echo也可以

结果都如下:

(post方式请求)

 

//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.html');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, true);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, true);
/*
 * 如果没有数据,这里可以省略
//设置post数据
$post_data = array(
    "username" => "qingfeng",
    "password" => "12345"
);
//如果是多维数组,必须用http_build_query,一维数组可用可以不用
$post_data = http_build_query($post_data);
//如果是json格式请求,$post_data  = json_encode($post_data, 64 | 256);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
*/
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data);//也可以用echo

被抓取的网页如下

结果如下

post发送数据的请求(简单举例子)

下面是test.php

 

//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test2.php');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, true);
//设置post数据
$post_data = array(
    "phone" => "13800000000",
    "password" => "123"
);
//如果是多维数组,必须用http_build_query,一维数组可用可以不用
$post_data = http_build_query($post_data); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data);//也可以用echo

下面是test2.php

 

if($_POST['phone'] == '13800000000' && $_POST['password'] == '123'){
    $data = array(
        "code" => 1,//1代表成功
        "msg" => "登录成功!",
        "data" => array("name"=>"清风","age"=>18)
    );
    print_r($data);
}else{
    $data = array(
      "code" => 0,//0代表失败
      "msg"  => "登录失败!",
      "data" => []
    );
    print_r($data);
}

结果如下:

这时候,我就考虑一个问题我,数组在test.php可以用print_r()很正常,为什么还可以用echo打印而不会报错呢,于是把用var_dump($data)打印一下,结果如下

可以看出,返回的是字符串而不是数组。数据返回的3种格式文本格式(默认),json格式,xml格式

更多请参考:Client URL 库

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP中使用CURL实现请求 的相关文章

  • 跳过解析 CODE 标签内的 BBCode

    我正在使用以下方法解析 BBCoderegex以便将其替换为 HTML 我现在被困住了 因为 code 标签解析 基本上 当你这样做时 code b this is bb b u code in u i code i code 它不应该取代
  • 如何替换每隔一个的空白?

    我想用 替换每个第二个空格 using preg replace 并输入这样的字符串 string a b c d e f g h i 应该会产生如下输出 a b c d e f g h i thanks 您可以组合使用explode ht
  • PHP 类似数组的对象

    我需要能够像这样设置我的对象 obj gt foo bar 然后我需要将它用作数组 如下所示 if obj foo bar more code here 只需添加implements ArrayAccess到您的类并添加所需的方法 公共函数
  • 在 PHP 中调用用户定义的函数 eval()

    我一直在使用 eval 函数进行 php 测试 但 eval 似乎无法正确调用用户定义的函数 请看我的例子 function equals a b if t r return true else throw new Exception ex
  • 更改管理仪表板 WooCommerce 小部件标题

    我想将 WooCommerce 仪表板小部件标题从 WooCommerce 状态 更改为其他内容 我知道我需要在 Functions php 中使用钩子 但我正在努力使这项工作正常进行 我在 WooCommerce 中找到了生成仪表板小部件
  • MySQL 启动错误 - 根元素丢失

    我在 Windows Server 2003 R2 上安装 MySQL 大约两个月了 启动时 我们会看到一个错误 显示 高严重性错误 根元素丢失 然后是另一个高严重性错误 显示 在调用 WriteToLog 方法之前必须定义日志文件路径 任
  • 在 PHP cURL 中设置 FTP 模式

    我有一些代码使用 PHP cURL 库通过 FTP 上传一些文件 我被告知将 FTP 模式从被动切换为主动 但我找不到如何做到这一点 相关文档中似乎没有选项 我实际上不确定它当前使用的是什么模式 或者我如何查看它 这个问题的答案是使用 cu
  • 将结果从 pdo 发送到 ajax 时遇到问题

    我想做的是 如果用户成功注册 pdo 将提供信息并将其发送到 ajax 如果用户注册与否 ajax 将发送消息 在我将这个条件放入我的 pdo 中后 它工作正常 现在它不会再插入 并且 ajax 告诉 注册用户时出错 每时每刻 script
  • PHP 的 Dom Node 查找 href 属性问题

    我正在尝试使用 php domDocument 从某些数据的 url 中提取 href 以下拉动网址的锚点 但我想要网址 events i race 1 trim cols gt item 1 gt nodeValue 如果有帮助的话 这里
  • 使用 Poedit 创建 POT 文件

    我正在拼命地尝试为我的 php 新应用程序创建一个目录 in 1 我创建了一个文件 trans php 其中放置了所有要翻译的值 例如 这是我的文件 2 我打开Poedit 在 路径 中这是我输入的内容 见图 然后我保存文件 php 的相同
  • 如何获取wordpress中文件的本地路径

    由于在wordpress中 上传的文件 图像以3种不同的大小存储 从而占用内存 我有一个代码可以根据给定图像的 URL 来调整图像的大小 调整大小的代码是 img wp get image editor image url if is wp
  • 在 PHP 中扩展单例

    我正在使用一个 Web 应用程序框架 其中一部分由许多服务组成 所有服务均以单例形式实现 它们都扩展了一个 Service 类 其中实现了单例行为 如下所示 class Service protected static instance p
  • 比较两个关联数组的键顺序

    假设我们有 2 个关联数组
  • Laravel 9.x 登录应用程序时目标类不存在错误

    尝试为管理面板制作一个登录应用程序以轻松编辑网站的其余部分 我有一个名为AuthController它执行多种操作 例如登录 注销 我决定只使用一个 而不是使用两个不同的控制器 当我去 login在我的浏览器上它返回Target class
  • WooCommerce - 按下按钮时更新所有产品描述(全站点)

    我一直在使用以下代码 希望能够创建一个按钮 按下它 然后我网站上的所有描述都会自动生成 梦想 我的问题 为什么我的代码没有按预期更新所有产品 到目前为止 我有以下代码 虽然它在一定程度上可以工作 但当按钮位于产品页面上时无法正常工作 它将更
  • 关闭语句后的 mysqli + xdebug 断点导致许多警告

    我有一段这样的代码 conn new mysqli host username passwd dbname stmt conn gt prepare SELECT stmt gt bind param stmt gt execute stm
  • 使用 PHP 上传、调整图像大小并裁剪图像中心

    我想要创建一个非常非常基本的上传 调整大小和裁剪 PHP 脚本 其功能与 Twitter 用于上传头像图片的方法相同 无论如何我最后检查过 我希望脚本拍摄任何尺寸的图像 将最短边的大小调整为 116 像素 然后裁剪顶部和底部 如果是横向 则
  • PHP 中的 __DIR__ 和 dirname(__FILE__) 有什么区别吗?

    对我来说看起来是一样的 但我不确定 因为有很多项目使用dirname FILE 他们的结果是完全一样的 所以 这没有什么区别 例如 以下两行 var dump dirname FILE var dump DIR 两者都会给出相同的输出 st
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • 在 Bluemix 中激活 PHP 扩展

    这纯粹是 Bluemix 问题 我的代码在本地主机上顺利运行 但是当我将其迁移到 Bluemix 时 我的数据库连接失败了 检查日志 我发现问题 调用未定义的函数 mysqli init HTTP 响应 500 我发现扩展已被禁用以使其更小

随机推荐

  • win10中安装mysql5.7

    一 mysql5 7网盘下载 win32位win64位都可以用 链接 https pan baidu com s 1j3b1 jMu0FqFt1EZi9SqsQ 提取码 4dsk 二 解压 解压mysql 5 7 34 win32 zip文
  • matlab计算纹波电压,Zeta电路的参数计算及仿真

    Zeta电路的参数计算较为简单 可以用matlab来完成 代码如下 clear clc Vin 12 输入电压单位V Vout 18 输出电压单位V Fs 5000000 开关频率单位Hz Iout 1 输出电流单位A DeltaIin 0
  • 面试频率最高的JAVA问题

    请说说接口和抽象类的区别 估计90 的人都答不好 我的答案是 1 从使用目的来看 接口只是一个类间的协议 它并没有规定怎么去实现 抽象类可以重用你代码使你的代码更加简洁 2 从行为来看 接口可以多继承 multi implement 抽象类
  • 太晚睡觉等于自杀(献给年轻人)

    沉重的话题 一个97级的名校高才生 毕业后进入微软工作 上月死了 只不过25岁的黄金年龄 珍视自己的生命吧 大家 对自己好一点 对了 又听到一个悲伤的消息 广告界的好青年 又挂了一人了 此人是联旭的 是业务还是设计我也搞不清楚 前几天在连续
  • 类对象与初始化列表

    在类中定义的数据成员一般都是基本的数据类型 但是类中的成员也可以是对象 叫做对象成员 C 中对对象的初始化是非常重要的操作 当创建一个对象的时候 c 编译器必须确保调用了所有子对象的构造函数 如果所有的子对象有默认构造函数 编译器可以自动调
  • Linux systemd

    这里写目录标题 一 配置文件内容 二 配置文件位置 三 开机启动配置 四 systemctl使用 一 配置文件内容 systemd服务配置文件存放在 usr lib systemd目录下 有系统system和用户user之分 需要开机不登录
  • 自建XSS平台与BUUCTF[GWCTF 2019]mypassword

    自建XSS平台与BUUCTF GWCTF 2019 mypassword 1 需要用到的工具 BlueLotus XSSReceiver XSS数据接收平台firesunCN BlueLotus XSSReceiver github com
  • C++学习之模板特例化

    模板是C 中一个很重要的特性 写一份代码能用于多种数据类型 包括用户自定义类型 例如 STL的sort 函数可以用于多种数据类型的排序 类stack可以用作多种数据类型的栈 但是 如果我们想对特定的数据类型执行不同的代码 而不是通用模板 呢
  • 第二章 ZAB协议介绍

    第二章 ZAB协议介绍 ZAB ZooKeeper Atomic Broadcast ZooKeeper 原子消息广播协议 是zookeeper数据一致性的核心算法 ZAB 协议并不像 Paxos 算法那样 是一种通用的分布式一致性算法 它
  • https是如何保住信息安全的?

    https采用的是非对称加密以及对称加密混合的加密方式加密来保证用户安全的 他比http协议多了一层加密层 SSL TSL 要详细说明这个 我们要从不加密开始说起 如果不加密的话 浏览器和服务器的交流 很容易就会被第三方拦截 然后信息被偷看
  • iphone降级_iPhone完美降级已实现,checkm8实现降级iOS10.3.3

    前段时间苹果的A5 A11设备被爆出巨大硬件级漏洞 由一位信息安全人员axi0mX 在社交软件上分享了出来 原文翻译过来checkm8 漏洞是一个针对苹果历代产品不可修复的bootrom 嵌入处理器芯片内的一小块掩模ROM或写保护闪存 虽然
  • Yaoo Messenger For Vista发布了

    Yaoo Messenger For Vista发布了 下载地址 http messenger yahoo com download vista php 转载于 https www cnblogs com tangpepper archiv
  • 用 Go 语言实现视频处理服务:从 Java 到 Go 的完整指南

    本文将详细介绍如何使用 Go 语言开发视频处理服务 包括视频转码和拼接功能 我们将首先简要介绍 Go 语言的基本概念 然后通过对比 Java 和 Go 代码 详细介绍如何实现视频转码和拼接功能 并提供相应的代码示例 本教程旨在帮助 Java
  • springboot调用外部接口

    方式一 使用原始httpClient请求 description get方式获取入参 插入数据并发起流程 author lyx date 2022 8 24 16 05 params documentId return String Req
  • uos命令_研华IO卡之统信UOS+龙芯平台下的驱动丢失解决办法

    真是活久见了 在UOS 龙芯3A4000平台下安装好的驱动重启后居然不见了 经过两天的努力 总算把这个问题解决了 其实解决的思路很简单 就是在系统启动后自动执行安装脚本 但是问题总是层出不穷 常规标准的做法 比如在 etc profile
  • 【java基础】Token令牌生成 token加密串 生成token Aes加密 Base64加密 JWT 【附源码】

    Token令牌 生成工具 包括 头部 header 载荷 payload 签证 signature 先看效果 可以自定义加密盐 主要代码 TokenUtil java package com lgq common Util import c
  • 关于PermissionError: [WinError 5] 拒绝访问的解决方案

    在python使用pip命令安装各种package时 可能会发生下列现象 PermissionError WinError 5 拒绝访问 c program files python36 Lib site packages selenium
  • elasticsearch复合类型——数组类型新建,插入,查询

    多值字段 在一般开发情况下 我们想让某个字段包含多个字段 我们可以通过一个标签数组来代替单一字符串 tags boy monitor 对于数组不需要特殊的映射 任何一个字段可以包括零个 一个或者多个值 对于全文字段而言将被解析成多个词 数组
  • 前端单元测试、集成测试、UI测试

    一 单元测试 1 断言assert 业界流行的断言库 Chai Assertion Library 既有行为驱动开发 Behavior Driven Development 简写BDD 又有驱动测试开发 TDD
  • PHP中使用CURL实现请求

    PHP建立CURL请求的基本步骤 初始化 curl init 设置属性 curl setopt 有一长串cURL参数可供设置 它们能指定URL请求的各个细节 如果需要 可以设置 CURLOPT TIMEOUT 允许 CURL 函数执行的最长