php中curl新手秒变高手的使用教程实例

张开发
2026/5/5 21:42:46 15 分钟阅读

分享文章

php中curl新手秒变高手的使用教程实例
起先cURL是做为一种命令行工具设计出来的比较幸运的是php也支持cURL了。通过cURL这个利器我们能在php程序中自由地发送HTTP请求到某个url来获取或者提交数据并且支持其它多种协议比如FTPTelnet以及SMTP等。在这篇博文中我将简述下在php中具体怎么使用cURL来处理一些事情。一、curl的优势你也许会说在php中可以很容易的获取某个url的内容只要通过file_get_contentsfile或者readfile函数就能轻松实现根本不必使用cURL:123$contentfile_get_contents(http://www.***.com);$lines file(http://www.***.com);readfile(http://www.***.com);没错以上函数在某些情况下使用起来确实很方便但是我感觉这几个函数不够灵活也没法进行错误处理。而且如果遇到要在php程序中向某个服务器提交表单数据上传文件处理cookies或者认证等任务时以上三个函数根本无法胜任。这个时候cURL就体现它的价值了。cURl不但支持很多的网络协议而且提供了关于url请求的具体信息很强大二、curl的简单使用步骤要使用cURL来发送url请求具体步骤大体分为以下四步1.初始化2.设置请求选项3.执行一个cURL会话并且获取相关回复4.释放cURL句柄,关闭一个cURL会话12345678910111213// 1. 初始化一个cURL会话$ch curl_init();// 2. 设置请求选项, 包括具体的urlcurl_setopt($ch, CURLOPT_URL,http://www.***.com);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);// 3. 执行一个cURL会话并且获取相关回复$response curl_exec($ch);// 4. 释放cURL句柄,关闭一个cURL会话curl_close($ch);cURL之所以强大正是体现在第二个步骤中。你可以通过curl_setopt灵活地设置请求选项这里面有很多的可选项三、错误处理在上述代码中你也可以增加错误处理的代码12345$response curl_exec($ch);if($response FALSE) {echocURL 具体出错信息: . curl_error($ch);}注意了在做上述判断时务必要使用因为请求的回复可能是空字符串curl在请求出错的情况下回返回FALSE值所以我们必须使用而不是。四、获取curl请求的具体信息在执行一个cURL请求后你也可以使用curl_getinfo获取该请求的具体信息:1234curl_exec($ch);$curl_info curl_getinfo($ch);echo收到的http回复的code为 {$curl_info[http_code]};上述$curl_info是一个关联数组可以从中获取很多的具体请求信息。参考http://cn2.php.net/manual/zh/function.curl-getinfo.php五、使用curl发送post请求我们在前面说过在向某个url发送get请求的话没有必要使用cURL来发送get请求可以使用比较便捷的file_get_contents函数来完成请求。但是一般地我们在提交某个表单的时候数据是通过post请求的内容区域来提交的而不是通过url参数来传递的, 这种情况下我们应该使用灵活的cURL来模拟发送post请求。现在让我们使用cURL来模拟发送一个post请求到post.php脚本提交几个数据到post.php然后在post.php中输出post请求中的数据。示例代码如下:12345678910111213141516171819202122$urlhttp://www.***.me/post.php;$post_dataarray(blog_name***,blog_urlhttp://www.***.com,actionSubmit);$ch curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 设置请求为post类型curl_setopt($ch, CURLOPT_POST, 1);// 添加post数据到请求中curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);// 执行post请求获得回复$response curl_exec($ch);curl_close($ch);echo$response;以上请求发送到post.php中后通过print_r($_POST)输出后以上示例代码会输出如下回复123456Array([blog_name] ***[blog_url] http://www.***.com[action] Submit)正如我们看到的cURL成功发送post请求到post.php提交了一些数据并且收到了相应的来自post.php的回复最后输出回复。上例虽然简单但是充分演示了cURL发送post请求的便捷及强大之处你可以在curl_setopt上做文章。六、文件上传下面来看下如果通过cURL发送post请求来实现文件上传。就拿深入浅出PHP下的文件上传中的文件上传例子来演示在深入浅出php下的文件上传中是通过表单的提交来实现文件上传的那么通过cURL怎么来实现呢?1234567891011121314151617181920212223$urlhttp://www.***.me/upload.php;$post_dataarray(attachmentE:/jackblog/boy.jpg);//初始化cURL会话$ch curl_init();//设置请求的urlcurl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置为post请求类型curl_setopt($ch, CURLOPT_POST, 1);//设置具体的post数据curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);$response curl_exec($ch);curl_close($ch);print_r($response);通过以上示例代码可以将我本地机器上的boy.jpg上传到本地服务器的upload.php中如果在upload.php输出上传的具体信息的话以上示例代码最后的输出的回复为123456789101112Array([attachment] Array([name] boy.jpg[type] application/octet-stream[tmp_name] D:\xampp\tmp\phpF27D.tmp[error] 0[size] 11490))由此可见如果你要通过cURL来上传文件的话只需要将上传的文件路径作为post数据设置到curl请求中并且在路径前面加上符合。

更多文章