<kbd id='woaibaidu'></kbd><address id='woaibaidu'><style id='woaibaidu'></style></address><button id='woaibaidu'></button>

          当前位置:主页 > 网络编程 > PHP编程 >
            PHP CURL与java http使用方法详解
            2018-01-29 22:03 发布 次浏览

          php curl

          有时分我们的项目需求与第3方平台停止交互。举个例子。

          如今有A、B两个平台。 甲方在最后1段工夫由A完成了1局部要害业务(如用户信息等)。 然后基于1局部缘由,如今有1些业务需求B来完成,且完成顺序挪用了1些敏感的接口只能在B方效劳器上跑,那末只能做两个平台之间的交互了。curl 就是这类成绩的处理方案。

          curl 是1个php扩大,你可以看做1个可以拜访其他网站的精简版阅读器。
          要运用curl 你得在php.ini 中开启相干的设置才干运用。
          经常使用的平台之间交互的数据花样 有json、xml等比拟盛行的数据花样。

          <?php
           @param
           $url  接口地址
           $https 能否是1个Https 恳求
           $post 能否是post 恳求
           $post_data post 提交数据 数组花样
          function curlHttp($url,$https = false,$post = false,$post_data = array())
          {
            $ch = curl_init();                            //初始化1个curl
            curl_setopt($ch, CURLOPT_URL,$url);     //设置接口地址 如:http://wwww.xxxx.co/api.php
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//能否把CRUL获得的内容赋值到变量
            curl_setopt($ch,CURLOPT_HEADER,0);//能否需求呼应头
            /*能否post提交数据*/
            if($post){
              curl_setopt($ch,CURLOPT_POST,1);
              if(!empty($post_data)){
                curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
              }
            }
            /*能否需求平安证书*/
            if($https)
            {
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  // https恳求 不验证证书和hosts
              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            }
            $output = curl_exec($ch);
            curl_close($ch);
            return $output;
          }
          ?> 
          

          如今 接口地址 http://www.xxxxx.com/api/{sid} 这个接口地址经过get 方式可以前往1个user 的 json数据花样 ,那末我们怎样去获得第3方平台的数据

          <?php
              $sid = 1;
              $url = "http://www.xxxxx.com/api/{$sid}";
              $data = curlHttp($url);
            $user = json_decode($data,true); 
          ?>
          

          其中$user就是获得user数组信息。
          在这里 curl 模仿阅读器对该域名停止了get恳求(固然,依据我们在参数中的设置,我们也能够去模仿post https 等恳求),获得到了呼应的数据。

          java http 完成了相似php curl 的功用

          java 是1门完片面向工具的言语,我以为除工具名够长不容易影象外。其它的都很好,且它是先编译成字节码然后由java虚拟机去运转的,不像 php 每次都需求去编译1次当前接纳运转。
          java对php curl 的完成

          文件 tool.HttpRequest

          package tool;
          
          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.io.PrintWriter;
          import java.net.URL;
          import java.net.URLConnection;
          import java.util.List;
          import java.util.Map;
          
          import java.net.URLEncoder;
          
          import Log.Log;
          
          public class HttpRequest 
          {
            /**
             * 向指定URL发送GET办法的恳求
             * 
             * @param url
             *      发送恳求的URL
             * @param param
             *      恳求参数,恳求参数应当是 name1=value1&name2=value2 的方式。
             * @return String 所代表近程资源的呼应后果
             */
            public static String get(String url,String param)
            {
              String result = "";
              BufferedReader in = null;
              try {
                String urlNameString = null;
          
                if(param == null)
                  urlNameString = url;
                else
                  urlNameString = url + "?" + param;
          
                //System.out.println("curl http url : " + urlNameString);
          
                URL realUrl = new URL(urlNameString);
                // 翻开和URL之间的衔接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的恳求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection","close");
                connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
          
                // 树立实践的衔接
                connection.connect();
          
                /*
                // 获得一切呼应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历一切的呼应头字段
                for (String key : map.keySet())
                {
                  System.out.println(key + "--->" + map.get(key));
                }
                */
          
                // 界说 BufferedReader输出流来读取URL的呼应
                in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
          
                String line;
          
                while ((line = in.readLine()) != null)
                {
                  result += line;
                }
              } catch (Exception e) {
                System.out.println("发送GET恳求呈现异常!" + e);
                e.printStackTrace();
              }
              // 运用finally块来封闭输出流
              finally {
                try {
                  if (in != null) {
                    in.close();
                  }
                } catch (Exception e2) {
                  e2.printStackTrace();
                }
              }
              return result.equals("") ? null : result;
            }
          
            /**
             * 向指定 URL 发送POST办法的恳求
             * 
             * @param url
             *      发送恳求的 URL
             * @param param
             *      恳求参数,恳求参数应当是 name1=value1&name2=value2 的方式。
             * @return String 所代表近程资源的呼应后果
             */
            public static String post(String url, String param) {
              PrintWriter out = null;
              BufferedReader in = null;
              String result = "";
              try {
                URL realUrl = new URL(url);
                // 翻开和URL之间的衔接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的恳求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST恳求必需设置以下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获得URLConnection工具对应的输入流
                out = new PrintWriter(conn.getOutputStream());
                // 发送恳求参数
                out.print(param);
                // flush输入流的缓冲
                out.flush();
                // 界说BufferedReader输出流来读取URL的呼应
                in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                  result += line;
                }
              } catch (Exception e) {
                System.out.println("发送 POST 恳求呈现异常!"+e);
                e.printStackTrace();
              }
              //运用finally块来封闭输入流、输出流
              finally{
                try{
                  if(out!=null){
                    out.close();
                  }
                  if(in!=null){
                    in.close();
                  }
                }
                catch(IOException ex){
                  ex.printStackTrace();
                }
              }
              return result;
            }  
          }
          
          

          然后相似php的运用以下

          web.app.controller.IndexController

          package web.app.controller;
          
          import tool.HttpRequest;
          
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestMethod;
          import org.springframework.web.bind.annotation.ResponseBody;
          
          import net.sf.json.JSONObject;
          
          @Controller
          @RequestMapping("Index")
          public class IndexController
          {
              @RequestMapping(value="index",method={RequestMethod.GET,RequestMethod.POST},produces="text/html;charset=utf⑻")
               @ResponseBody
            public String index()
            {
              String sid = "1";
              String apiUrl = "http://www.xxxxx.com/api/" +sid;
                  String data = HttpRequest.get(apiUrl,null);   //开端模仿阅读器恳求
                  JSONObject json = JSONObject.fromObject(data);  //剖析前往的json数据后果
          
            }
          }
          

          以上就是本文的全部内容,希望对各人的学习有所协助,也希望各人多多支持聚合网。