使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网 页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内 容,cURL 是一个功能强大的PHP库。
PHP中的CURL函数库(Client URL Library Function)
curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。
例子一: 基本例子
基本例子
﹤?php
// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);
?>
例子二: POST数据
sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。
POST数据
﹤?php
$phoneNumber = '13812345678';
$message = 'This message was generated by curl and php';
$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.lxvoip.com/sendSMS.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec();
curl_close($ch);
?﹥
例子三:使用代理服务器
使用代理服务器
﹤?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.cmx8.cn');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.lxvoip.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
$data = curl_exec();
curl_close($ch);
?﹥
例子四: 模拟登录
Curl 模拟登录 discuz 程序,适合DZ7.0,将username改成你的用户名,userpass改成你的密码就可以了.
Curl 模拟登录 discuz 程序
<?php
!extension_loaded('curl') && die('The curl extension is not loaded.');
$discuz_url = 'http://www.lxvoip.com';//论坛地址
$login_url = $discuz_url .'/logging.php?action=login';//登录页地址
$get_url = $discuz_url .'/my.php?item=threads'; //我的帖子
$post_fields = array();
//以下两项不需要修改
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//用户名和密码,必须填写
$post_fields['username'] = 'lxvoip';
$post_fields['password'] = '88888888';
//安全提问
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo验证码
$post_fields['seccodeverify'] = '';
//获取表单FORMHASH
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);
if(!empty($matches)) {
$formhash = $matches[1];
} else {
die('Not found the forumhash.');
}
//POST数据,获取COOKIE
$cookie_file = dirname(__FILE__) . '/cookie.txt';
//$cookie_file = tempnam('/tmp');
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);
//带着上面得到的COOKIE获取需要登录后才能查看的页面内容
$ch = curl_init($get_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
var_dump($contents);
相关推荐
实验中,使用`curl_init()` 连续抓取了5次同一个网页,然后用`curl_multi_init()` 同时处理5个相同的请求。结果表明,`curl_multi_init()` 在处理多请求时的总耗时通常会少于`curl_init()` 单线程的耗时,证明了多...
在执行多线程或批量操作时,可以使用 `curl_multi_init()` 和相关多线程 cURL 函数。 `curl_exec()` 用于执行初始化的 cURL 会话,返回执行结果。如果发生错误,可以通过 `curl_errno()` 获取错误号,`curl_error()...
在这个示例代码中,我们使用 curl_init() 函数初始化一个 cURL 会话,然后使用 curl_setopt() 函数设置请求选项,接着使用 curl_exec() 函数执行请求,最后使用 curl_close() 函数关闭 cURL 会话。 六、结论 本文...
### curl_init函数的使用说明 curl_init()是php_curl库中用于初始化一个cURL会话的函数。此函数无需参数时,它会返回一个cURL资源标识符,用于后续的cURL函数操作。如果提供了URL作为参数,cURL会话会立即被设置为...
总的来说,`curl_multi`系列函数在PHP中用于并发执行多个cURL请求,通过合理的使用`curl_multi_init`、`curl_multi_add_handle`、`curl_multi_exec`、`curl_multi_getcontent`、`curl_multi_remove_handle`、`curl_...
在上述代码中,curl_init()用于初始化一个新的cURL会话,curl_setopt()函数用于设置CURL会话的选项,curl_exec()用于执行cURL会话,curl_close()用于关闭cURL会话。CURLOPT_URL选项设置请求的URL地址,CURLOPT_...
- CURL库支持多线程,可以同时处理多个请求,使用`curl_multi_init()`和`curl_multi_add_handle()`等函数进行管理。 通过Curl.zip中的DEMO,我们可以看到这些概念如何在实际代码中体现,学习如何将CURL库有效地...
此外,如果你正在编写一个图形界面应用,你可能需要使用不同的方法来更新进度条,比如在GUI控件中直接修改进度值。 总的来说,通过`curl`的`CURLOPT_PROGRESSFUNCTION`选项,我们可以灵活地实现自定义的下载进度条...
2. **创建会话**: `curl_easy_init()`函数创建一个CURL句柄,用于处理单个传输。 3. **设置选项**: 使用`curl_easy_setopt()`设置各种选项,如URL、HTTP方法、超时、代理、认证信息等。 4. **执行请求**: 调用`...
PHP中的curl_setopt函数是用于设置cURL传输选项的函数,它...因此,对于Web开发人员而言,掌握cURL的使用方法是十分必要的。通过了解和运用本文中提到的curl_setopt函数用法,可以有效地解决各种网络请求中遇到的问题。
### PHP cURL 使用实例详解 #### 一、cURL简介 cURL 是一款强大的命令行工具,用于通过URL从或向服务器传输数据。...cURL 是一个非常强大且灵活的工具,掌握其使用方法对于进行网络编程非常有帮助。
这个例子提供了一个基础的Curl获取网络时间的方法,对于初学者来说是一个很好的起点。在实际项目中,你可能需要添加错误处理、优化性能、或者根据具体需求进行修改。希望这个教程能帮助你理解如何在C++中利用Curl...
- **获取文件大小**:使用 `curl_easy_getinfo()` 函数的 `CURLINFO_CONTENT_LENGTH_DOWNLOAD` 参数。 - **下载进度显示**:通过设置 `CURLOPT_NOPROGRESS` 和 `CURLOPT_PROGRESSFUNCTION` 参数。 - **断点续传**:...
接着,为了发起一个POST请求,我们需要使用`curl_easy_init()`函数初始化一个`curl`会话,然后设置请求选项,如URL、POST数据和HTTP方法。这可以通过`curl_easy_setopt()`函数完成。例如: ```cpp CURL *curl = ...
7. **多线程支持**:Curl库支持多线程操作,允许同时进行多个网络请求,通过`curl_multi_init()`和`curl_multi_add_handle()`等函数实现。 8. **安全特性**:Curl支持SSL/TLS加密,可以处理HTTPS请求,同时可以进行...
8. **curl_multi_系列函数**: 这些函数用于处理批量的cURL请求,如`curl_multi_init()`、`curl_multi_add_handle()`、`curl_multi_exec()`等,它们允许同时执行多个cURL会话,提高效率。 9. **curl_version()**: ...
### curl函数说明 ...本文详细介绍了一些常用函数的功能、参数、返回值以及使用示例,有助于开发者更高效地利用`cURL`进行网络通信开发。掌握这些函数不仅能提高开发效率,还能优化网络请求的性能表现。
要开始使用curl_multi系列函数,首先需要调用curl_multi_init()函数初始化一个curl_multi资源。 ```php $mh = curl_multi_init(); ``` 步骤二:添加cURL子句柄 初始化后,通过curl_multi_add_handle()将多个由curl_...