PHP cURL是一个非常强大的网络请求库,可以通过它快速地实现HTTP请求、发送POST、GET等请求,获取目标网站数据,方便处理和使用。
这里是一个简单的例子,通过PHP cURL发送HTTP GET请求:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "https://www.baidu.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$html = curl_exec($ch);curl_close($ch);echo $html;
第一行定义了一个cURL句柄,然后使用curl_setopt函数配置了请求的URL,设置了CURLOPT_RETURNTRANSFER选项以获取响应结果,然后使用curl_exec发送请求以获取目标网页,最后通过curl_close函数关闭了句柄。
如果你希望获取的是json数据格式,可以将CURLOPT_RETURNTRANSFER和CURLOPT_HEADERHEADER选项都设置为true,并在curl_exec函数后调用json_decode函数将结果解析成数组:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://api.example.com/getData");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, true);$result = curl_exec($ch);list($header, $json) = explode("\r\n\r\n", $result, 2);curl_close($ch);$data = json_decode($json, true);var_dump($data);
如果你希望发送POST请求,可以设置CURLOPT_POST选项为1,然后用curl_setopt函数设置CURLOPT_POSTFIELDS选项来指定POST数据:
$data = array('key1' =>'value1','key2' =>'value2');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://api.example.com/postData");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));$result = curl_exec($ch);curl_close($ch);var_dump($result);
同时,有时候需要带上header或cookie来请求,可以使用curl_setopt函数设置CURLOPT_HTTPHEADER或CURLOPT_cookie,例如:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://api.example.com/headerData");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Authorization: Bearer '.$accessToken));curl_setopt($ch, CURLOPT_cookie, 'session_id='.$sessionId);$result = curl_exec($ch);curl_close($ch);var_dump($result);
以上仅仅是PHP cURL这个强大的网络请求库中的一些简单而常用的用法,如果你希望更详细地了解它的使用方式和更复杂的请求场景,可以查看官方文档。另外,为了在代码运行之前查看curl执行的日志,我们可以打开curl的verbose模式,只需要同时设置CURLOPT_VERBOSE选项和CURLOPT_STDERR选项即可:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://api.example.com/getData");curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_VERBOSE, true);$fp = fopen('php://temp', 'w+');curl_setopt($ch, CURLOPT_STDERR, $fp);$result = curl_exec($ch);rewind($fp);$verboseLog = stream_get_contents($fp);fclose($fp);curl_close($ch);echo $verboseLog;