迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > PHP >

使用 PHP 的 cURL GET 请求

作者:迹忆客 最近更新:2023/03/27 浏览次数:

在网络上,主要是 HTTPS,我们使用 GET 请求来获取特定的资源表示。为了获取数据,使用了 GET 方法。

特别是在 API 和 Web 抓取场景中,开发人员使用特定于语言的方法。我们使用 cURL 函数来处理 PHP 中的 GET 请求。

cURL 库处理从初始化、连接设置和传输到资源返回的操作。为了实现所有这些操作,可以使用内置函数,例如 curl_close()curl_init()curl_exec()

本文讨论了 cURL GET 请求的不同用例以及实现它的相应函数。


使用 curl_init()curl_setopt() 在 PHP 中获取请求

从另一个服务器或用户获取请求的典型格式涉及使用以下基本功能。

curl_init(); // initializes a cURL session
curl_setopt(); // changes the cURL session behavior with options
curl_exec(); // executes the started cURL session
curl_close(); // closes the cURL session and deletes the variable made by curl_init();

你将看到本文中的所有四个函数以及你将使用 cURL 库编写的大部分 GET 请求代码。

现在,对于一些示例用法,我们将为变量 $url 分配我们要从中获取请求的站点的 URL,并使用 curl_init() 函数启动 cURL 会话。之后,我们指定在指定 URL 上执行 cURL 传输的选项。

第一个 curl_setopt() 函数语句包含带有 $url 变量赋值的 URL to fetch 选项。第二个 curl_setopt() 函数语句包含以字符串形式返回传输选项,包含一个布尔值。

<?php

$url = "https://reqbin.com/echo";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);

?>

上述 PHP 代码的输出如下。

在 PHP 中使用 curl_init 和 curl_setopt 获取请求


在 PHP 中将 cURL 与 API (JSON) 结合使用

通常,当与 API 交互时,数据响应通常是 JSON 并使用 cURL 函数,我们可以使用 curl_getinfo()json_encode() 函数以属性值对和数组格式正确处理这些数据对象,其中。

在这里,我们将与演示 User API 进行交互,使用 cURL 库获取 JSON 数据,并使用适当的函数对 JSON 文件进行编码。

  1. 初始化 URL 变量和 cURL 会话。

    $url = 'https://jsonplaceholder.typicode.com/users';
    // Sample example to get data.
    $resource = curl_init($url);
    
  2. 设置 cURL 选项和信息变量。

    curl_setopt($resource, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($resource);
    $info = curl_getinfo($resource);
    $code = curl_getinfo($resource, CURLINFO_HTTP_CODE);
    
  3. 调试以检查响应状态代码(可选步骤),但你应该看到 200

    echo $result.'<br>';
    echo "<pre>";
    print_r($info);
    echo "</pre>";
    
    // Get response status code
    echo "<pre>";
    print_r($code);
    echo "</pre>";
    
  4. 关闭 cURL 会话以更好地管理资源。

    curl_close($resource);
    
  5. 创建数组模板来存储通过 JSON 从 API 获取的数据。

    // set_opt_array
    $user = [
    	'name' => 'John Doe',
    	'username' => 'john',
    	'email' => 'john@example.com'
    ];
    
  6. 使用 curl_init()curl_setopt_array() 使用所有重要选项处理从 URL 解析的 JSON 数据。

    $resource = curl_init();
    curl_setopt_array($resource, [
    	CURLOPT_URL => $url,
    	CURLOPT_RETURNTRANSFER => true,
    	CURLOPT_POST => true,
    	CURLOPT_HTTPHEADER => ['content-type: application/json'],
    	CURLOPT_POSTFIELDS => json_encode($user),
    ]);
    
  7. 分别使用 curl_exec()curl_close() 函数执行初始化的 cURL 会话和关闭 cURL 会话并释放所有资源。但是,在 PHP 8.0.0 及更高版本中,curl_close() 函数无效

    $result = curl_exec($resource); // creates and returns result
    curl_close($resource);
    echo $result;
    

代码的输出将产生下面的 PHP 多维数组。

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "Shanna@melissa.tv",
    "address": {
      "street": "Victor Plains",
      "suite": "Suite 879",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    },
    "phone": "010-692-6593 x09125",
    "website": "anastasia.net",
    "company": {
      "name": "Deckow-Crist",
      "catchPhrase": "Proactive didactic contingency",
      "bs": "synergize scalable supply-chains"
    }
  },
  {
    "id": 3,
    "name": "Clementine Bauch",
    "username": "Samantha",
    "email": "Nathan@yesenia.net",
    "address": {
      "street": "Douglas Extension",
      "suite": "Suite 847",
      "city": "McKenziehaven",
      "zipcode": "59590-4157",
      "geo": {
        "lat": "-68.6102",
        "lng": "-47.0653"
      }
    },
    "phone": "1-463-123-4447",
    "website": "ramiro.info",
    "company": {
      "name": "Romaguera-Jacobson",
      "catchPhrase": "Face to face bifurcated interface",
      "bs": "e-enable strategic applications"
    }
  },
....
]

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 PHP 中获取时间差的分钟数

发布时间:2023/03/29 浏览次数:183 分类:PHP

本文介绍了如何在 PHP 中获取时间差的分钟数,包括 date_diff()函数和数学公式。它包括 date_diff()函数和数学公式。

PHP 中的重定向

发布时间:2023/03/29 浏览次数:136 分类:PHP

本教程演示了如何将用户从页面重定向到 PHP 中的其他页面

PHP 分页

发布时间:2023/03/29 浏览次数:66 分类:PHP

本教程介绍如何在 PHP 中对数据库行进行分页

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便