• 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 ?>

  • 相关阅读:
    调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置
    调试SQLSERVER (一)生成dump文件的方法
    SQLSERVER中如何快速比较两张表的不一样
    Leptonica在VS2010中的编译及简单使用举例
    UVALive 3135--Argus+自己定义优先队列的优先规则
    mysql---总体备份和增量备份
    OllyDbg 使用笔记 (十二)
    《TCP/IP具体解释卷2:实现》笔记--IP:网际协议
    blurImage做图片模糊处理报错free(): invalid next size
    docker网络配置方法总结
  • 原文地址:https://www.cnblogs.com/cbryge/p/6080916.html
Copyright © 2020-2023  润新知