zoukankan      html  css  js  c++  java
  • php的curl也没这么复杂

    许多同学在第一次使用curl的时候感觉一个头两个大(包括我在内),看着这一条条的curl_setopt函数完全摸不着头脑,不过在你花10分钟看了我的介绍后相信你以后也能轻松戏耍php的curl了

    首先,请看一个curl代码(花10秒钟,略看一遍,然后跳到后文)

     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等其他协议)

    现在再看代码,实际上代码只做了五件事情

    1. curl_init()初始化curl
    2. curl_setopt()设置传输数据和参数
    3. curl_exec()执行传输并获取返回数据
    4. curl_errono()返回错误码
    5. 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, 1);
    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 ?>

    感兴趣的同学还可以参考php官方文档,学习更多curl用法

  • 相关阅读:
    Git代码行数统计命令
    JPA访问数据库的几种方式
    爱码小士丨代码一敲十年,收入虽高前途摇摆
    “肉瘾”女孩从软件测试工程师到主管的成长感悟
    华为测试大牛Python+Django接口自动化怎么写的?
    携程大牛的单元测试是怎么样写的?
    Jmeter参数的AES加密使用
    弄啥嘞?热爱你的Bug
    “进腾讯工作一个月,我想辞职了”
    我在华为,软件测试人员在工作中如何运用Linux?
  • 原文地址:https://www.cnblogs.com/hornedreaper1988/p/4273206.html
Copyright © 2011-2022 走看看