php的curl也没这么复杂

许多同学在第一次使用curl的时候感觉一个头两个大(包括我在内),看着这一条条的curl_setopt函数完全摸不着头脑,不过在你花10分钟看了我的介绍后相信你以后也能轻松戏耍php的curl了

首先,请看一个curl代码(花10秒钟,略看一遍,然后跳到后文)

 1 <?php
 2 $data = "<soap:Envelope>[...]</soap:Envelope>";
 3 $tuCurl = curl_init();
 4 curl_setopt($tuCurl, CURLOPT_URL, "https://example.com/path/for/soap/url/");
 5 curl_setopt($tuCurl, CURLOPT_PORT , 443);
 6 curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
 7 curl_setopt($tuCurl, CURLOPT_HEADER, 0);
 8 curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
 9 curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem");
10 curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem");
11 curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem");
12 curl_setopt($tuCurl, CURLOPT_POST, 1);
13 curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
14 curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
15 curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data);
16 curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data)));
17
18 $tuData = curl_exec($tuCurl);
19 if(!curl_errno($tuCurl)){
20   $info = curl_getinfo($tuCurl);
21   echo ‘Took ‘ . $info[‘total_time‘] . ‘ seconds to send a request to ‘ . $info[‘url‘];
22 } else {
23   echo ‘Curl error: ‘ . curl_error($tuCurl);
24 }
25
26 curl_close($tuCurl);
27 echo $tuData;
28 ?>

WTF,这到底是在做什么?

想要学会这种“高端”的用法吗?

首先,相信你肯定知道网址大部分是由http开头的,那是因为他们需用通过http(超文本传送协议 HTTP-Hypertext transfer protocol)来进行数据传输,但是传输数据不是简单的将一句"Hello"传到服务器上就搞定的事情,发送者为了方便接受者理解发送者的实际意图以及知道发送人到底是何许人也,发送者往往要将许多额外信息一并发给接受者,就像寄信人需要在信件外套一个信封一样,信封上写着各种发信人的信息。所有的这些最终合并成了一个叫做报文(message)的玩意,也就构成了整个互联网的基础。

curl的工作就是通过http协议发送这些message (php的libcurl目前还支持https、ftp、telnet等其他协议)

现在再看代码,实际上代码只做了五件事情

  1. curl_init()初始化curl
  2. curl_setopt()设置传输数据和参数
  3. curl_exec()执行传输并获取返回数据
  4. curl_errono()返回错误码
  5. curl_close()关闭curl

下面给出使用GET和POST方法如何抓取和提交任意页面的数据

 1 <?php
 2     //初始化
 3     $curl = curl_init();
 4     //设置url
 5     curl_setopt($curl, CURLOPT_URL, ‘http://www.baidu.com‘);
 6     //设置返回获取的输出为文本流
 7     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 8     //执行命令
 9     $data = curl_exec($curl);
10     //关闭URL请求
11     curl_close($curl);
12     //显示获得的数据
13     print_r($data);
14 ?>
15
16 <?php
17     //初始化
18     $curl = curl_init();
19     //设置url
20     curl_setopt($curl, CURLOPT_URL, ‘http://www.baidu.com‘);
21     //设置返回获取的输出为文本流
22     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
23     //设置post方式提交
24     curl_setopt($curl, CURLOPT_POST, 1);
25     //设置post数据
26     curl_setopt($curl, CURLOPT_POSTFIELDS, array("data"=>"value");
27     //执行命令
28     $data = curl_exec($curl);
29     //关闭URL请求
30     curl_close($curl);
31     //打印数据
32     print_r($data);
33 ?>

感兴趣的同学还可以参考php官方文档,学习更多curl用法

时间: 2024-07-31 14:31:31

php的curl也没这么复杂的相关文章

ubuntu 16.04 php 安装curl方法

先查看自己的php是否已经安装了curl.方法如下:1.在web服务器目录( Ubuntu下的通常为 /var/www )新建test.php文件2.编辑文件,键入下面一行代码:<?php phpinfo(); ?>3.保存文件4.打开浏览器,浏览该网页.(例如:http://localhost/test.php)5.搜索"curl",看看是否已经安装了curl.没搜到的话肯定是没装了,要装的请看下面. 安装方法很简单,只需要一条命令.(这里选择直接apt-get安装,因为

关于curl java 模拟http请求

近期笔者项目需求java模拟http请求,获取dns解析 tcp连接等详细耗时信息. java api中提供的urlConnection 及apache提供的httpClient都不能胜任该需求,二次开发太费时间.于是google之. 最后 得出两种解决办法: 一是使用HTTP4J. 该开源项目使用socket方式,模拟请求,记录时间戳,基本满足需求.对于header自定义等细节,可在此基础上比较方便的二次开发.只是,其中有一些bug需要修复, 如https链接时获取不到ssl时间等.使用该项目

谈谈我对Linux系统学习的历程回顾

众所周知,Windows 和Linux 是目前最流行的2个操作系统.Windows系统适合普通用户,它的优势是图形化界面,简单易用,使用起来门槛很低,很容易上手,所以,windows占有了大多数普通用户群体.而Linux 被誉为黑客的操作系统,因其稳定和命令行操作的高效性而广泛用于开发工作,占有绝大多数开发者群体.当然,关于这两大系统的优缺点,这里就不再赘述,我主要想谈谈我的Linux的学习历程参考书籍<Linux就该这么学>和心得体会. Linux初体验 一年前,我还不知道Linux为何物,

CI框架 QQ接口(第三方登录接口PHP版)

本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了.10分钟不要,接口就可完成.第一步:申请APP ID,APP KEY,申请地址:http://connect.opensns.qq.com/验证通过后:会得到APP ID,APP KEY.这是你用个文件把这些信息保持下来,免得用的时候有要上网去查,记录在本地记事本里,方便,用的时候打开就可以.如下:APP ID:101091331A

php 调用curl_init失败

当你在开发微信公众号,微信小程序的时候,往往会遇到困难 进入服务器,输入 tail -f /var/log/apache2/error.log 看看apache2的日志 就因为php 的curl扩展没安装缺啥安装啥就好了 安装curl 看看你的是什么版喔 sudo apt-get install curl libcurl3 libcurl3-dev php7.0-curl 然后重启就好了 原文地址:https://www.cnblogs.com/lyc642983907/p/11939071.h

在网页中插入背景音乐代码(html)hK3V

有两种分别用和标签当用插入背景音乐时可以设置宽度和高度为,隐藏播放器.二者的参数如下:■: 是用来插入背景音乐,但只适用于,其参数设定不多.如下 设定档案及路径,可以是相对或绝对.是否在音乐档下载完之后就自动播放.是,否内定.是否自动反复播放.表示重复两次,表示重复多次.■: 是用来插入各种多媒体,式可以是...等等,及新版的都支持.其参数设定较多.如下下 设定档案及路径,可以是相对或绝对.是否在音乐档下载完之后就自动播放.是,否内定.是否自动反复播放.表示重复两次,是,否.是否完全隐藏控制画面

简易用的curl类,没看过curl文档也能使用

一切为了简单 <?php /* * @content: 对curl进行友好封装 * @author:wmc * @createtime:2015/07/22 */ /* 功能: * 1.获取请求头信息 * 2.获取响应头信息 * 3.获取响应内容 * 4.获取请求数据 * 5.能请求 https * 6.to be continue */ class Curl_Class { /* * curl句柄 * @access protected */ protected $ch = null; /*

php+curl上传文件

因为公司项目用java做的,需要我这边用php上传文件.只给了个接口,参数都不明确,然后这边不提交表单,在生成pdf之后就立马上传.用了php+curl,总是没上传成功,这里看到了篇文章http://blog.sina.com.cn/s/blog_709475a101013dlf.html,希望可以借鉴.还有这篇http://www.cnblogs.com/jackluo/p/4113255.html

cocos2d-x学习笔记(七)利用curl获取资源包的大小

cocos2d-x将curl作为第三方库加进来,所以我们可以很方便的使用它. 最近在研究资源热更新,由于想在用户更新之前提示资源包大小,让用户知道此次更新所需消耗流量,所以在资源热更新AssetsManager类的基础上加入获取资源包大小的代码. 我用的是cocos2d-x 3.4的版本,AssetsManager源文件在cocos2d\extensions\assets-manager目录下. 一.首先在AssetsManager.h文件class AssetsManager底下加入代码 do