PHP 发送 GET 和 POST 请求
在使用 PHP 抓取网页或调用一些第三方的 API 的时候可能会遇到需要发送 GET 或者 POST 请求,例如 Google 的 reCAPTCHA 验证就需要发送 POST 请求,百度翻译的 API 也需要发送 GET 或 POST 请求,这里就来简单写一下 PHP 发送 GET 和 POST。
GET 请求
发送 GET 请求很简单,使用的函数是 file_get_contents()
,下面给名为 server.php
的文件发送 get 请求:
<?php
$url = 'http://localhost/php/test/server.php?data=hello'; // url和参数
$result = file_get_contents($url); // 发送get请求
file_get_contents()
函数的功能是把文件读入一个字符串,可以用来读取文件,也可以用来发送 GET 请求,参数为 url 或文件名,如果需要发送内容可以在 url 后面加参数名和参数值,下面演示给 server.php
文件发送 user 和 password:
<?php
$url = 'http://localhost/php/test/server.php?user=123&password=123';
file_get_contents($url);
url 参数的拼接和 jQuery 发送 get 或 post 请求是一样的,请求成功会返回请求到的字符串,请求失败会返回 false
。
POST 请求
发送 post 请求会稍微麻烦一些,需要用到 Client URL
库,关于 Client URL
的介绍可以看 http://php.net/manual/zh/intro.curl.php ,关于安装/配置可以看 http://php.net/manual/zh/curl.setup.php ,下面给 server.php
发送一个简单的 POST 请求:
<?php
$url = 'http://localhost/php/test/server.php'; // url
$data = array('data' => 'hello'); // 要发送的数据
$ch = curl_init(); // 初始化Client URL
curl_setopt($ch, CURLOPT_URL, $url); // 设置url
curl_setopt($ch, CURLOPT_POST, true); // 设置请求方式为post
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置要发送的数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置以字符串方式返回
$result = curl_exec($ch); // 执行curl绘画
curl_close($ch); // 关闭curl会话
echo $result; // 输出返回的内容
下面是用到的函数说明:
curl_init(url)
初始化 Client URL
会话,接收一个 string
类型的URL,也可以为空,如果成功,返回 cURL
句柄,出错返回 false
。
curl_setopt(ch, option, value)
设置 curl
参数,下面是参数说明:
参数 | 说明 |
---|---|
ch | 初始化Client URL时的句柄 |
option | 选项,接收一个预定义常量 |
value | 选项值,类型可能是bool or integer or string or array or 资源 |
下面是用到的预定义常量的说明:
预定义常量 | 说明 |
---|---|
CURLOPT_URL | string类型的URL |
CURLOPT_POST | TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。 |
CURLOPT_POSTFIELDS | 全部数据使用HTTP协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。 文件类型可在文件名后以 ';type=mimetype' 的格式指定。 这个参数可以是 urlencoded 后的字符串,类似'para1=val1¶2=val2&...',也可以使用一个以字段名为键值,字段数据为值的数组。 如果value是一个数组,Content-Type头将会被设置成multipart/form-data。 |
CURLOPT_RETURNTRANSFER | TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。 |
curl
的功能很强大,不只能发送 POST,这里没有写到的预定义常量可以看 http://php.net/manual/zh/function.curl-setopt.php 。
curl_exec(ch)
执行 curl
会话,接收一个 curl
句柄,成功时返回请求到的相关内容,失败时返回 false
。
curl_close(ch)
关闭 curl
会话,释放资源,接收一个 curl
句柄,无返回值。
以上就是比较简单的 PHP 发送 get 和 post,方法有很多种,我只是写了其中的两种,关于更复杂的带 COOKIE 发送以后再写。
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/354/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。
良作无人?