深入解析Curl模拟浏览器操作:从GET到POST的完整指南
1、首先说明一下,curl的百科解释是:

PHP[2]支持的 libcurl 库是由 Daniel Stenberg 创建的。这个库允许你与各种服务器使用各种类型的协议进行连接和通讯。目前,libcurl 支持 http、https、ftp、gopher、telnet、dict、file 和 ldap 协议。libcurl 支持以下功能:HTTPS 认证、HTTP POST、HTTP PUT、FTP 上传(PHP 的 FTP 扩展也可完成此功能)、HTTP 基于表单的上传、代理、cookies 以及用户名 + 密码的认证。在 PHP 中,可通过 cURL 实现 Get 和 Post 请求。
登录后复制
简单来讲,curl 是抓取页面的一种进阶形式。它能够支持 GET、POST 等浏览器所具备的行为,通过这些行为能够实现模拟浏览器操作的目的。
最简单的一个模型就是如下图所示的模型:
就是进行初始化操作,进行配置,获取页面的源代码数据,然后将其关闭。一个极为简单的例子呈现如下:
登录后复制
我们能够看到浏览器会把百度的页面结果输出出来。接着我们进一步深入去研究怎样借助 curl 来实现一个模拟登陆的过程,也就是去模拟 post 的这个过程。
POST 的过程稍微复杂些,然而其原理与浏览器提交过程是一样的。简单来讲,就是借助 curl 把用户名和密码(或者其他与之对应的参数,具体需根据 post 页面来讨论)提交到 post 所指向的处理页面。其过程如下所示:
我们可以看到过程大致相同。在 curl 初始化之后,需要生成一系列的 post 参数,接着进行提交操作,最后等待返回数据。
例子如下:
登录后复制
注:例子亲测有效,只是我把我自己测试的真实账号修改了一下。
上面的例子就可以显示,我们可以成功或者失败的返回数据。
但是存在一个问题,即失效性。这意味着仅仅登陆成功登陆页是没有效果的。因为服务器不一定能保持我们的登陆状态。所以如果我们直接获取其他页面的数据,网站就会给出未登录提示。在此情况下,就需要设置一个 cookie。
4、cookie设置及登陆
从图形来看,我们可分两步进行。第一步是模拟登陆并设置 cookie。第二步是读取 cookie 以及加载需登陆后才能访问的页面。
下面给出测试成功的例子。
登录后复制
结果显示成功。我的网址以及相关参数都进行了修改,读者可依自身需求进行相应修改。