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,这到底是在做什么?的更多相关文章

  1. 【Android进阶】在开发中Application到底用来做什么

    首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...

  2. spring boot到底帮我们做了那些事?

    一.前言     上一篇介绍了注解,也是为这一篇做铺垫,传统的都是通过配置文件来启动spring,那spring boot到底是做了什么能让我们快速开发昵? 二.启动原理     看下程序启动的入口, ...

  3. 用大白话告诉你 :Java 后端到底是在做什么?

    阅读本文大概需要 6 分钟. 作者:黄小斜 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...

  4. <mvc:annotation-driven />到底帮我们做了啥

    一句 <mvc:annotation-driven />实际做了以下工作:(不包括添加自己定义的拦截器) 我们了解这些之后,对Spring3 MVC的控制力就更强大了,想改哪就改哪里. s ...

  5. .NET ORM 分表分库【到底】怎么做?

    理论知识 分表 - 从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表.分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面.分表后单表的并发能力提高了 ...

  6. 异步编程系列第05章 Await究竟做了什么?

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  7. 【转】【51CTO 网+】怎样做一款让用户来电的产品

    [51CTO 网+]怎样做一款让用户来电的产品 据相关调查显示,目前全球移动用户平均每人安装应用约95个,每天使用的应用约35个.可见面对众多的移动应用,用户拥有非常大的选择空间.如果由于交互设计欠佳 ...

  8. Hibernate和jsp做数据库单表的增删改查

    虽然很基础,但是我转牛角尖了~~~~这是几个文件 1.最重要的.Java文件 package com.chinasofti.hibb.struts; import org.hibernate.Sess ...

  9. [MarsZ]程序猿谈大学之为什么不推荐就业时做程序猿

    这篇文章适合一切有志做一个程序猿的人,而不仅仅只是即将进入就业市场的大学生. “又到了毕业找工作的时候了,好多朋友打电话向我咨询要不要让孩子做程序员.作为一个业内资深人士,我觉得这不能一概而论!要辩证 ...

随机推荐

  1. 如何调试lua脚本

    首先感谢下ZeroBrane Studio. 这里拿cocos2dx/samples/Lua/HelloLua做例子来说明,其他的都是同样道理. 1.下载调试Lua所需的IDE,地址在这.有经济实力的 ...

  2. Flash Player 19.0.0.124 Beta + IHTMLDocument3 IHTMLDocument2 ->get_innerHTML

    安装 Flash Player 19 之后 有 flash 动画的网页中 IHTMLDocument3 IHTMLDocument2 ->get_innerHTML 获取的 html 内容都是空 ...

  3. iOS的runtime(转)

    1. 什么是runtime 运行时刻是指一个程序在运行(或者在被执行)的状态.也就是说,当你打开一个程序使它在电脑上运行的时候,那个程序就是处于运行时刻.在一些编程语言中,把某些可以重用的程序或者实例 ...

  4. CKeditor与CKfinder的简单配置

    1.关掉PHP的转义字符,不然从文本框控件中得来的内容,全部有转义字符,不能正常显示,所以在取得文本框控件所传递来的数据之时,要使用下面这样的方式: $内容=stripslashes($_POST[' ...

  5. 一、HTML和CSS基础--HTML+CSS基础课程--第5部分

    第九章 CSS盒模型 元素分类
: 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的 ...

  6. MySQL和PHP基础考试错题回顾

    13.关于exit( )与die( )的说法正确的是( B) C A.当exit( )函数执行会停止执行下面的脚本,而die()无法做到 B.当die()函数执行会停止执行下面的脚本,而exit( ) ...

  7. iOS开发网络篇—网络请求(HTTP协议)小结(转)

    1. 聊一下HTTP协议(协议的完整的通信过程) 2.通信过程 1> 请求 * 客户端 --> 服务器 * 请求的内容 a. 请求行(请求方法\HTTP协议\请求资源路径) b. 请求头( ...

  8. Java Hour 34 Weather ( 7 ) struts2 – validate

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 34 Form Validation 一般Form 提交都有验证的, ...

  9. 人人都可以开发高可用高伸缩应用——论Azure Service Fabric的意义

    今天推荐的文章其实是微软的一篇官方公告,宣布其即将发布的一个支撑高可用高伸缩云服务的框架--Azure Service Fabric. 前两天,微软Azure平台的CTO Mark Russinovi ...

  10. linux socket 编程(C语言)

    转自:http://blog.csdn.net/piaojun_pj/article/details/5920888 最近看了一些网络编程的书籍,一直以来总感觉网络编程神秘莫测,其实网络编程入门还是很 ...