zoukankan      html  css  js  c++  java
  • curl get post 数据

    记一次yii下curl排错经验:

    要求需要通过header传送token,数据传入方式为application/json

    1.postman方式调取,没有问题,参数已json形式传过去-{}

     2.原生PHP调取

            $url = Yii::$app->params['get_auto_test_detail_list'];
            $params['start'] = 0;
            $params['count'] = 10;
            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));   //不是json_encode(http_build_query($params))
            $a = "Bearer eyJ0eXAiOi";            
            curl_setopt($ch,CURLOPT_HTTPHEADER, array("Authorization: " .$a, "Content-Type:application/json")); //数组形式,参数名字是CURLOPT_HTTPHEADER
            $output = curl_exec($ch);
            if($output === FALSE ){ echo "CURL Error:".curl_error($ch); } curl_close($ch); var_dump($output);die;

     3.Yii 通过Curl类 _simple_call()方法调取,

    public function getAutoTestDetailList()
    { $url
    = Yii::$app->params['get_auto_test_detail_list']; $params['start'] = 0; $params['count'] = 10; $curl = new Curl(); $options['HTTPHEADER'] = array("Authorization:" .self::TOKEN, "Content-Type:" .self::CONTENT_TYPE); //封装方法里面对httpheader有拼接,调用set_opt_array() $result = $curl->_simple_call("post", $url, json_encode($params), $options); //参数json形式 if ($result !== false) { $result = json_decode($result, true); }
    echo
    "<pre>";var_dump($result);echo "</pre>"; }

    1.get方式传值

     1 function  testGet(){ 
     2         $ch = curl_init ();                              //初始化一个cURL会话
     3         $url = "127.0.0.1/testPage?test=test";  
    4
    5 curl_setopt ( $ch, CURLOPT_URL, $url ); //设置一个cURL传输选项,url链接 6 curl_setopt ( $ch, CURLOPT_HEADER, 0 ); //是否传头信息 7
    8
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); //是否流,获取数据返回,不设置默认将抓取数据的结果返回,成功返回bool(true),失败返回bool(false) 9 $content = curl_exec ( $ch );           //关闭链接 10 var_dump($content); 11 12 } 13 14 15 16 function testPage(){ 17 18 echo $_GET['test']; 19 }

    2.post方式传值

    function  testPost(){ 
            
            $ch = curl_init ();            
            $data["test"] = "test";     
            $url = "127.0.0.1/test";
            curl_setopt ( $ch, CURLOPT_URL, $url );   
            curl_setopt ( $ch, CURLOPT_POST, 1 ); //如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用
            curl_setopt ( $ch, CURLOPT_HEADER, 0 );
            curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );   
            curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );   //post方式传数据
            $content = curl_exec ( $ch );
            curl_close ( $ch );
           
            var_dump($content);            
    }
    
    function  testPage(){
          
            echo $_POST['test'];          
    }    

     3.关于php curl 编码方式 的content-type  是  multipart/form-data 还是 application/x-www-form-urlencoded

    传递一个数组到CURLOPT_POSTFIELDS,CURL会把数据编码成 multipart/form-data,而传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded"。

    http://www.phperz.com/article/14/1031/32420.html  这个链接说了下两种编码的区别。而如果将post方式传输的数据 惊醒http_build_query($data) 后 ,再传输就是

    application/x-www-form-urlencoded 格式 。

     

    4.一个较为ok的例子

      1 class RemoteToolService {
      2 
      3     static public $timeout = 10;
      4 
      5     /**
      6      * send request
      7      *
      8      * @param  $url
      9      * @param  $type
     10      * @param  $args
     11      * @param  $charset
     12      *
     13      * @Returns   
     14      */
     15     public function send($url, $type, $args, $charset = 'utf-8') {
     16         if ($type == 'post') {
     17             $returnValue = $this->_post($url, $args, $charset);
     18         } else {
     19             $url .= '?' . http_build_query($args);
     20             $returnValue = $this->_get($url, $charset);
     21         }
     22         return $returnValue;
     23     }
     24 
     25     private function _post($url, $arguments, $charset = 'utf-8') {
     26         if (is_array($arguments)) {
     27             $postData = http_build_query($arguments);
     28         } else {
     29             $postData = $arguments;
     30         }
     31 
     32         $ch = curl_init();
     33         curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
     34         curl_setopt($ch, CURLOPT_URL, $url);
     35         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     36         curl_setopt($ch, CURLOPT_POST, 1);
     37         curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
     38         curl_setopt($ch, CURLOPT_TIMEOUT, self::$timeout);
     39         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$timeout);
     40 
     41         $returnValue = curl_exec($ch);
     42         curl_close($ch);
     43         if ($charset != 'utf-8') {
     44             $returnValue = iconv($charset, 'utf-8', $returnValue);
     45         }
     46         return $returnValue;
     47     }
     48 
     49     private function _get($url, $charset = 'utf-8') {
     50         $ch = curl_init();
     51         curl_setopt($ch, CURLOPT_URL, $url);
     52         curl_setopt($ch, CURLOPT_HEADER, 0);
     53         curl_setopt($ch, CURLOPT_TIMEOUT, self::$timeout);
     54         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$timeout);
     55         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     56         curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
     57         $returnValue = curl_exec($ch);
     58         curl_close($ch);
     59         if ($charset != 'utf-8') {
     60             $returnValue = iconv($charset, 'utf-8', $returnValue);
     61         }
     62         return $returnValue;
     63     }
     64 
     65     public function sendJson($url, $arguments, $charset = 'utf-8') {
     66         if (is_array($arguments)) {
     67             $postData = json_encode($arguments);
     68         } else {
     69             $postData = $arguments;
     70         }
     71 
     72         $ch = curl_init();
     73         curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
     74         curl_setopt($ch, CURLOPT_URL, $url);
     75         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     76         curl_setopt($ch, CURLOPT_POST, 1);
     77         curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
     78         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($postData)));
     79         curl_setopt($ch, CURLOPT_TIMEOUT, self::$timeout);
     80         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$timeout);
     81 
     82         $returnValue = curl_exec($ch);
     83         curl_close($ch);
     84         if ($charset != 'utf-8') {
     85             $returnValue = iconv($charset, 'utf-8', $returnValue);
     86         }
     87         return $returnValue;
     88     }
     89 
     90 }
     91 
     92 $params = array(
     93             'uid' => $uid,
     94             'incr' => $incr,
     95             'type' => $type,
     96             'source' => $scorce,
     97             'sign' => $sKey
     98 );
     99 $ob = new  RemoteToolService();
    100 $data =$ob->send($callUrl, 'post', $params);

    对curl的了解还是不太清晰,只是暂时能用。。

  • 相关阅读:
    虚树入门
    378. 骑士放置(最大独立集)
    377. 泥泞的区域(最大点集)
    352. 闇の連鎖
    P2680 运输计划
    Linux下的段错误(Segmentation fault)
    Acwing 98-分形之城
    快速幂 和 快速乘
    P1308-道路修建 (noi 2011)
    洛谷 P1070 道路游戏(noip 2009 普及组 第四题)
  • 原文地址:https://www.cnblogs.com/xiaoyueer/p/4184066.html
Copyright © 2011-2022 走看看