建站知识
php curl setopt get
2024-12-26 18:07  点击:0
PHP是一种迅速发展的动态编程语言,是许多网站最受欢迎的服务端脚本语言之一。其中,PHP cURL是一种处理URL的工具,它支持各种协议,如HTTP、HTTPS、FTP、Telnet等。得益于其可扩展性、性能、灵活性和高度可定制,cURL实现了许多网络编程的任务,比如数据抓取、文件上传、数据传输、博客发布等等。在PHP-CURL中,setOpt()方法是最重要的方法之一,它可以设置许多选项和参数,用来指定如何处理抓取的数据、访问目标URL等,在这里我们重点讲解如何使用setOpt()方法来远程获取数据和处理这些数据。以百度搜索为例,下面是获取百度搜索首页的PHP-CURL代码:
<?php$ch = curl_init();  //初始化curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");  //设置访问的urlcurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //是否输出返回头信息curl_setopt($ch, CURLOPT_HEADER, 0);  //是否输出返回头信息$output = curl_exec($ch);  //执行命令curl_close($ch);  //关闭句柄echo ($output);  //输出返回内容?>
以上代码的作用是通过curl_init()初始化一个curl会话,使用curl_setopt()方法来设置url、是否输出返回头信息等选项,然后执行curl_exec()命令,获取数据,最后用curl_close()关闭curl会话。下面我们一一详细讲解这些代码。 第一行代码,初始化curl会话,因为在使用PHP-CURL时,首先需要初始化一个curl句柄(handle),它是个全局变量,存储着必要的参数,如本次请求的url、HTTP请求相关的数据等。第二行代码中,用curl_setopt()方法设置了访问的url是http://www.baidu.com/,这里我们以百度搜索首页为例,注意,在设置句柄时,通过curl_setopt()方法设置相关属性和各种选项,这些选项控制着如何在本次会话中发送数据、如何接收数据等。第三行和第四行代码用于控制是否输出返回头信息。curl_setopt()方法中的CURLOPT_RETURNTRANSFER选项可以指定是否输出返回结果,此处设置为1,则将结果返回到字符串中,否则不返回结果。第五行代码使用curl_exec()方法,执行本次命令,获取返回结果,注意,在执行命令时,使用的curl句柄是第一步初始化得到的句柄。第六行代码通过curl_close()方法,关闭本次curl使用的句柄,释放资源。最后一行,使用echo将返回的结果输出即可。以上,就是用PHP-CURL获取远程数据和处理数据的过程,下面我们再给出两个具体的例子。1.用PHP-CURL获取远程图片下面,我们以获取百度LOGO为例,使用PHP-CURL获取远程图片。
<?php  $ch = curl_init('http://www.baidu.com/img/bd_logo1.png');  curl_setopt($ch, CURLOPT_HEADER, 0);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);  $output = curl_exec($ch);  curl_close($ch);  $fp = fopen("bd_logo1.png",'w');fwrite($fp, $output);fclose($fp);echo "获取图片成功!" ;  ?>
以上代码中,第一行初始化CURL会话,第二行设置了访问的URL,指定为http://www.baidu.com/img/bd_logo1.png,第三行和第四行代码用于控制是否输出返回头信息和结果,第五行代码用于获得返回结果,第六行关闭会话并释放相关资源,第七行往本地写入返回数据,第八行输出提示信息。2. 用PHP-CURL模拟登录前端模拟登陆已被反追踪并许多网站封杀,如果你想用爬虫或简单的自动化工具模拟登录某个网站,用PHP-CURL则是个不错的选择,下面我们以模拟登录Github为例:
<?php$url = "https://github.com/login";$post["commit"] = "Sign in";$post["utf8"] = "✓";$post["authenticity_token"] = "在自己的Chrome浏览器中登录Github,按F12打开开发者选项/Network面板,提交表单后找到form表单,找到authenticity_token的值即可";$post["login"] = "你的用户名/邮箱地址";$post["password"] = "你的密码";$ch = curl_init($url);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_cookieJAR, 'github_cookies.txt');curl_setopt($ch, CURLOPT_cookieFILE, 'github_cookies.txt');$output = curl_exec($ch);$info = curl_getinfo($ch);curl_close($ch);echo $output;if ($info['http_code'] == 200) {echo "登录成功!";} else {echo "登录失败!";}  ?>
代码中,第一行指定了模拟登陆的URL,也就是https://github.com/login,第二行设置了post数据,其中,commit和utf8都是GitHub中的“固定值”,authenticity_token需要自己去Chrome的开发者工具中复制,login和password是你的用户名和密码。在第三行,我们初始化了CURL会话,指定URL,第四行设置了post方式,第五行设置post数据,第六行设置返回结果,第七行cookieJAR和cookieFILE,这些是为了维持会话而设置的,注意,cookieJAR和cookieFILE需要你这里设置好一个名字,以备验证cookie,第八行用执行命令来获取结果,最后用curl_getinfo()方法获取请求信息,curl_close()关闭会话。最后,判断获取状态是否为200,是则登录成功,否则登录失败。总结来说,PHP-CURL是很强大且灵活的,可以用来实现很多网络编程任务,如数据抓取、数据传输、网站登录等。能够充分利用PHP-CURL,对于处理网站开发、数据处理、抓取数据等工作都有巨大的帮助。