在网络上,主要是 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
与 API (JSON) 结合使用
通常,当与 API 交互时,数据响应通常是 JSON 并使用 cURL
函数,我们可以使用 curl_getinfo()
和 json_encode()
函数以属性值对和数组格式正确处理这些数据对象,其中。
在这里,我们将与演示 User
API 进行交互,使用 cURL
库获取 JSON 数据,并使用适当的函数对 JSON 文件进行编码。
-
初始化 URL 变量和
cURL
会话。$url = 'https://jsonplaceholder.typicode.com/users'; // Sample example to get data. $resource = curl_init($url);
-
设置
cURL
选项和信息变量。curl_setopt($resource, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($resource); $info = curl_getinfo($resource); $code = curl_getinfo($resource, CURLINFO_HTTP_CODE);
-
调试以检查响应状态代码(可选步骤),但你应该看到
200
。echo $result.'<br>'; echo "<pre>"; print_r($info); echo "</pre>"; // Get response status code echo "<pre>"; print_r($code); echo "</pre>";
-
关闭
cURL
会话以更好地管理资源。curl_close($resource);
-
创建数组模板来存储通过 JSON 从 API 获取的数据。
// set_opt_array $user = [ 'name' => 'John Doe', 'username' => 'john', 'email' => 'john@example.com' ];
-
使用
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), ]);
-
分别使用
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"
}
},
....
]