WTF,这到底是在做什么?
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等其他协议)
现在再看代码,实际上代码只做了五件事情
curl_init()初始化curl
curl_setopt()设置传输数据和参数
curl_exec()执行传输并获取返回数据
curl_errono()返回错误码
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, 2881064151);
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 ?>
WTF,这到底是在做什么?的更多相关文章
- 【Android进阶】在开发中Application到底用来做什么
首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...
- spring boot到底帮我们做了那些事?
一.前言 上一篇介绍了注解,也是为这一篇做铺垫,传统的都是通过配置文件来启动spring,那spring boot到底是做了什么能让我们快速开发昵? 二.启动原理 看下程序启动的入口, ...
- 用大白话告诉你 :Java 后端到底是在做什么?
阅读本文大概需要 6 分钟. 作者:黄小斜 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...
- <mvc:annotation-driven />到底帮我们做了啥
一句 <mvc:annotation-driven />实际做了以下工作:(不包括添加自己定义的拦截器) 我们了解这些之后,对Spring3 MVC的控制力就更强大了,想改哪就改哪里. s ...
- .NET ORM 分表分库【到底】怎么做?
理论知识 分表 - 从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表.分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面.分表后单表的并发能力提高了 ...
- 异步编程系列第05章 Await究竟做了什么?
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- 【转】【51CTO 网+】怎样做一款让用户来电的产品
[51CTO 网+]怎样做一款让用户来电的产品 据相关调查显示,目前全球移动用户平均每人安装应用约95个,每天使用的应用约35个.可见面对众多的移动应用,用户拥有非常大的选择空间.如果由于交互设计欠佳 ...
- Hibernate和jsp做数据库单表的增删改查
虽然很基础,但是我转牛角尖了~~~~这是几个文件 1.最重要的.Java文件 package com.chinasofti.hibb.struts; import org.hibernate.Sess ...
- [MarsZ]程序猿谈大学之为什么不推荐就业时做程序猿
这篇文章适合一切有志做一个程序猿的人,而不仅仅只是即将进入就业市场的大学生. “又到了毕业找工作的时候了,好多朋友打电话向我咨询要不要让孩子做程序员.作为一个业内资深人士,我觉得这不能一概而论!要辩证 ...
随机推荐
- DLL工程没有生成对应的lib文件
要至少导出一个函数/变量才能产生lib 也就是说得用到__declspec(dllexport)
- July 17th, Week 30th Sunday, 2016
You are beautiful, but that is not why I love you. 你如此美丽,但我并非因此而爱你. Although we have always been tol ...
- 多源最短路(codevs 1077)
题目描述 Description 已知n个点(n<=100),给你n*n的方阵,a[i,j]表示从第i个点到第j个点的直接距离. 现在有Q个询问,每个询问两个正整数,a和b,让你求a到b之间的最 ...
- 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象
JavaScript是基于原型的语言,通过new实例化出来的对象,其属性和行为来自于两部分,一部分来自于构造函数,另一部分是来自于原型.构造函数中定义的属性和行为的优先级比原型中定义的属性和优先级高, ...
- yum rpm
本文多选自鸟哥的私房菜,非常感谢鸟哥^_ _^
- gitlab安装
[root@localhost ~]# wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rp ...
- centos下安装五笔输入法的教程
[root@ok ~]# yum update [root@ok ~]# yum install ibus-table-chinese-wubi-haifeng 以上两步已经成功!! #yum ins ...
- Webloigic监控
http://www.huilog.com/?p=688 http://www.beansoft.biz/weblogic/docs92/jmx/accessWLS.html http://docs. ...
- fopen()及相关函数使用
函数简介 函数功能:打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); ],_wfopen 所需库:<stdio.h&g ...
- Luci中cbi控件类型总结
转自:http://blog.chinaunix.net/uid-28413840-id-4654479. 名称 描述 继承自 模板 NamedSection A fixed configuratio ...