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. iOS 中使用Base64编码方式编码图片数据

    最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...

  2. Java for LeetCode 166 Fraction to Recurring Decimal

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  3. p235习题2

    List  成功添加 Set  添加失败

  4. BZOJ 3156: 防御准备 斜率优化DP

    3156: 防御准备 Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...

  5. jmeter性能测试实战-web登录测试

    一.项目背景: 网站信息: 操作系统类型 二.需求: 登录并发测试 三.场景: 1s增加两个线程,运行2000次 分别看20.40.60并发下的表现 四.监控: 成功率.响应时间.标准差.cpu.me ...

  6. ClassLoader类加载机制

    一.类加载器 类加载器(ClassLoader),顾名思义,即加载类的东西.在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘.网络或其他来源加载到内存中,并对字节码进行解 ...

  7. mvc-3模型和数据(2)

    寻址引用 源代码现存的问题:当保存或通过find()查找记录时,所返回的实例并没有复制一份,因此对任何属性的修改都会影响原始资源:这里我们只想当调用update()方法时才会修改资源 //由于Mode ...

  8. BFS+模拟 ZOJ 3865 Superbot

    题目传送门 /* BFS+模拟:dp[i][j][p] 表示走到i,j,方向为p的步数为多少: BFS分4种情况入队,最后在终点4个方向寻找最小值:) */ #include <cstdio&g ...

  9. HDU1576 A/B(乘法逆元)

    题目的代数系统可以看作整数模9973乘法群?然后存在乘法逆元. 于是题目要求$A \div B \pmod {9973} $其实就相当于求$A \times B^{-1}\pmod {9973} $. ...

  10. FZU2218 Simple String Problem(状压DP)

    首先,定义S,表示前k个字符出现的集合,用二进制来压缩. 接下来,推出dp1[S],表示集合为S的子串的最长长度. 然后根据dp1[S]再推出dp2[S],表示集合为S或S的子集的子串的最长长度. 最 ...