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 中的frame,bounds,center,transform关联

    这里有一篇好文章 http://www.winddisk.com/2012/06/07/transform/ 先看几个知识点,UIView 的frame,bounds,center,transform ...

  2. Java for LeetCode 189 Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...

  3. Android自定义progressBar

    通过继承系统ProgressBar实现 效果图 实现 HorizontalProgressBarWithNumber 自定义属性 <?xml version="1.0" en ...

  4. 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML

    https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Prin ...

  5. MQ的通讯模式

    1) 点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一.一对多.多对多.多对一等多种配置方式,支持树状.网状等多种拓扑结构. 2) 多点广播:MQ适用于不同类型的应用.其中重要的,也是正 ...

  6. [译]SQL Server 之 查询计划缓存和重编译

    查询优化是一个复杂而且耗时的操作,所以SQL Server需要重用现有的查询计划.查询计划的缓存和重用在多数情况下是有益的的,但是在某些特殊的情况下,重编译一个查询计划可能能够改善性能. SELECT ...

  7. pl/sql developer 登陆提示ORA-12514(转)

      pl/sql developer 登陆提示ORA-12514 说明监听服务已经起来了 备注:通过 lsnrctl 命令来启动/停止/查看/重载监听器/服务 lsnrctl start|stop|s ...

  8. zookeeper中client命令实践

    Welcome to ZooKeeper! 2016-09-14 16:06:04,528 [myid:] - INFO [main-SendThread(master:2181):ClientCnx ...

  9. Ecological Premium

    #include<bits/stdc++.h> using namespace std; int main() { int n,m; unsigned long long int a,b, ...

  10. nginx查看post请求日志

    在http段加上 log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $ ...