PHP-CURL库常用功能

本文详细介绍了如何利用PHP的cURL库轻松抓取网页内容,包括初始化会话、设置参数、执行请求及解析输出等步骤,并提供了实例代码演示。

使用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()函数返回的句柄。

代码如下
  1. ﹤?php
  2. // 初始化一个 cURL 对象
  3. $curl = curl_init();
  4.  
  5. // 设置你需要抓取的URL
  6. curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');
  7.  
  8. // 设置header
  9. curl_setopt($curl, CURLOPT_HEADER, 1);
  10.  
  11. // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
  12. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  13.  
  14. // 运行cURL,请求网页
  15. $data = curl_exec($curl);
  16.  
  17. // 关闭URL请求
  18. curl_close($curl);
  19.  
  20. // 显示获得的数据
  21. var_dump($data);
  22.  
  23. ?>


例子二: POST数据

代码如下
  1. ﹤?php
  2. $phoneNumber = '13812345678';
  3. $message = 'This message was generated by curl and php';
  4. $curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_URL, 'http://www.lxvoip.com/sendSMS.php');
  7. curl_setopt($ch, CURLOPT_HEADER, 1);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9. curl_setopt($ch, CURLOPT_POST, 1);
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  11. $data = curl_exec();
  12. curl_close($ch);
  13. ?﹥

例子三:使用代理服务器
例子四: 模拟登录
Curl 模拟登录 discuz 程序,适合DZ7.0,将username改成你的用户名,userpass改成你的密码就可以了.
代码如下
  1. <?php  
  2. /**  
  3. * Curl 模拟登录 discuz 程序  
  4. * 尚未实现开启验证码的的论坛登录功能  
  5. */  
  6.  
  7. !extension_loaded('curl') && die('The curl extension is not loaded.');  
  8.  
  9. $discuz_url = 'http://www.lxvoip.com';//论坛地址  
  10. $login_url = $discuz_url .'/logging.php?action=login';//登录页地址  
  11. $get_url = $discuz_url .'/my.php?item=threads'; //我的帖子  
  12.  
  13. $post_fields = array();  
  14. //以下两项不需要修改  
  15. $post_fields['loginfield'] = 'username';  
  16. $post_fields['loginsubmit'] = 'true';  
  17. //用户名和密码,必须填写  
  18. $post_fields['username'] = 'lxvoip';  
  19. $post_fields['password'] = '88888888';  
  20. //安全提问  
  21. $post_fields['questionid'] = 0;  
  22. $post_fields['answer'] = '';  
  23. //@todo验证码  
  24. $post_fields['seccodeverify'] = '';  
  25.  
  26. //获取表单FORMHASH  
  27. $ch = curl_init($login_url);  
  28. curl_setopt($ch, CURLOPT_HEADER, 0);  
  29. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  30. $contents = curl_exec($ch);  
  31. curl_close($ch);  
  32. preg_match('/<inputs*type="hidden"s*name="formhash"s*value="(.*?)"s*/>/i', $contents,$matches);  
  33. if(!empty($matches)) {  
  34.     $formhash = $matches[1];  
  35. } else {  
  36.     die('Not found the forumhash.');  
  37. }  
  38.  
  39. //POST数据,获取COOKIE  
  40. $cookie_file = dirname(__FILE__) . '/cookie.txt';  
  41. //$cookie_file = tempnam('/tmp');  
  42. $ch = curl_init($login_url);  
  43. curl_setopt($ch, CURLOPT_HEADER, 0);  
  44. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  45. curl_setopt($ch, CURLOPT_POST, 1);  
  46. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);  
  47. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  
  48. curl_exec($ch);  
  49. curl_close($ch);  
  50.  
  51. //带着上面得到的COOKIE获取需要登录后才能查看的页面内容  
  52. $ch = curl_init($get_url);  
  53. curl_setopt($ch, CURLOPT_HEADER, 0);  
  54. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  
  55. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);  
  56. $contents = curl_exec($ch);  
  57. curl_close($ch);  
  58.  
  59. var_dump($contents);  
  60. ?>

 抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开 
始吧! 

首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简 
单起见,让我们将变量直接设在脚本中。 

<? 
$url = 'http://www.php.net'; 
?>; 

第二步,我们抓取指定文件,并且通过file()函数将它存在一个数组里。 

<? 
$url = 'http://www.php.net'; 
$lines_array = file($url); 
?>; 

好了,现在在数组里已经有了文件了。但是,我们想分析的文本可能不全在一行里面。为了解决这个文 
件,我们可以简单地将数组$lines_array转化成一个字符串。我们可以使用implode(x,y)函数来实现它。如 
果在后面你想用explode(将字符串变量数组),将x设成"|"或"!"或其它类似的分隔符可能会更好。但是出于 
我们的目的,最好将x设成空格。y是另一个必要的参数,因为它是你想用implode()处理的数组。 

<? 
$url = 'http://www.php.net'; 
$lines_array = file($url); 
$lines_string = implode('', $lines_array); 
?>; 

现在,抓取工作就做完了,下面该进行分析了。出于这个例子的目的,我们想得到在<head>;到</head>; 
之间的所有东西。为了分析出字符串,我们还需要叫做正规表达式的东西。 

<? 
$url = 'http://www.php.net'; 
$lines_array = file($url); 
$lines_string = implode('', $lines_array); 
eregi("<head>;(.*)</head>;", $lines_string, $head); 
?>; 

让我们看一下代码。正如你所见,eregi()函数按下面的格式执行: 

eregi("<head>;(.*)</head>;", $lines_string, $head); 

"(.*)"表示所有东西,可以解释为,"分析在<head>;和</head>;间的所以东西"。$lines_string是我们正 
在分析的字符串,$head是分析后的结果存放的数组。 

最后,我们可以输数据。因为仅在<head>;和</head>;间存在一个实例,我们可以安全的假设数组中仅存 
在着一个元素,而且就是我们想要的。让我们把它打印出来吧。 

<? 
$url = 'http://www.php.net'; 
$lines_array = file($url); 
$lines_string = implode('', $lines_array); 
eregi("<head>;(.*)</head>;", $lines_string, $head); 
echo $head[0]; 
?>; 

这就是全部的代码了。
(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值