pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

PHP CURL與java http使用方法詳解

這篇文章主要為大家詳細(xì)介紹了PHP CURL與java http使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

php curl

有時(shí)候我們的項(xiàng)目需要與第三方平臺(tái)進(jìn)行交互。舉個(gè)例子。

現(xiàn)在有A、B兩個(gè)平臺(tái)。 甲方在最初一段時(shí)間由A實(shí)現(xiàn)了一部分關(guān)鍵業(yè)務(wù)(如用戶信息等)。 然后基于一部分原因,現(xiàn)在有一些業(yè)務(wù)需要B來實(shí)現(xiàn),且實(shí)現(xiàn)程序調(diào)用了一些敏感的接口只能在B方服務(wù)器上跑,那么只能做兩個(gè)平臺(tái)之間的交互了。curl 就是這種問題的解決方案。

curl 是一個(gè)php擴(kuò)展,你可以看作一個(gè)可以訪問其他網(wǎng)站的精簡版瀏覽器。
要使用curl 你得在php.ini 中開啟相關(guān)的配置才能使用。
常用的平臺(tái)之間交互的數(shù)據(jù)格式 有json、xml等比較流行的數(shù)據(jù)格式。


<?php
 @param
 $url  接口地址
 $https 是否是一個(gè)Https 請求
 $post 是否是post 請求
 $post_data post 提交數(shù)據(jù) 數(shù)組格式
function curlHttp($url,$https = false,$post = false,$post_data = array())
{
  $ch = curl_init();                            //初始化一個(gè)curl
  curl_setopt($ch, CURLOPT_URL,$url);     //設(shè)置接口地址 如:http://wwww.xxxx.co/api.php
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//是否把CRUL獲取的內(nèi)容賦值到變量
  curl_setopt($ch,CURLOPT_HEADER,0);//是否需要響應(yīng)頭
  /*是否post提交數(shù)據(jù)*/
  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請求 不驗(yàn)證證書和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  }
  $output = curl_exec($ch);
  curl_close($ch);
  return $output;
}
?> 

現(xiàn)在 接口地址 http://www.xxxxx.com/api/{sid} 這個(gè)接口地址通過get 方式可以返回一個(gè)user 的 json數(shù)據(jù)格式 ,那么我們怎么去獲取第三方平臺(tái)的數(shù)據(jù)


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

其中$user就是獲取user數(shù)組信息。
在這里 curl 模擬瀏覽器對該域名進(jìn)行了get請求(當(dāng)然,根據(jù)我們在參數(shù)中的設(shè)置,我們也可以去模擬post https 等請求),獲取到了響應(yīng)的數(shù)據(jù)。

java http 實(shí)現(xiàn)了類似php curl 的功能

java 是一門完全面向?qū)ο蟮恼Z言,我覺得除了對象名夠長不容易記憶外。其它的都很好,且它是先編譯成字節(jié)碼然后由java虛擬機(jī)去運(yùn)行的,不像 php 每次都需要去編譯一次以后采取運(yùn)行。
java對php curl 的實(shí)現(xiàn)

文件 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發(fā)送GET方法的請求
   * 
   * @param url
   *      發(fā)送請求的URL
   * @param param
   *      請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。
   * @return String 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果
   */
  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();
      // 設(shè)置通用的請求屬性
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection","close");
      connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

      // 建立實(shí)際的連接
      connection.connect();

      /*
      // 獲取所有響應(yīng)頭字段
      Map<String, List<String>> map = connection.getHeaderFields();
      // 遍歷所有的響應(yīng)頭字段
      for (String key : map.keySet())
      {
        System.out.println(key + "--->" + map.get(key));
      }
      */

      // 定義 BufferedReader輸入流來讀取URL的響應(yīng)
      in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

      String line;

      while ((line = in.readLine()) != null)
      {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發(fā)送GET請求出現(xiàn)異常!" + e);
      e.printStackTrace();
    }
    // 使用finally塊來關(guān)閉輸入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        e2.printStackTrace();
      }
    }
    return result.equals("") ? null : result;
  }

  /**
   * 向指定 URL 發(fā)送POST方法的請求
   * 
   * @param url
   *      發(fā)送請求的 URL
   * @param param
   *      請求參數(shù),請求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。
   * @return String 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果
   */
  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();
      // 設(shè)置通用的請求屬性
      conn.setRequestProperty("accept", "*/*");
      conn.setRequestProperty("connection", "Keep-Alive");
      conn.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 發(fā)送POST請求必須設(shè)置如下兩行
      conn.setDoOutput(true);
      conn.setDoInput(true);
      // 獲取URLConnection對象對應(yīng)的輸出流
      out = new PrintWriter(conn.getOutputStream());
      // 發(fā)送請求參數(shù)
      out.print(param);
      // flush輸出流的緩沖
      out.flush();
      // 定義BufferedReader輸入流來讀取URL的響應(yīng)
      in = new BufferedReader(
          new InputStreamReader(conn.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發(fā)送 POST 請求出現(xiàn)異常!"+e);
      e.printStackTrace();
    }
    //使用finally塊來關(guān)閉輸出流、輸入流
    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-8")
     @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數(shù)據(jù)結(jié)果

  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持編程學(xué)習(xí)網(wǎng)。

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

這篇文章主要介紹了PHP實(shí)現(xiàn)的防止跨站和xss攻擊代碼,是一款來自阿里云的防注入腳本,可實(shí)現(xiàn)針對注入、XSS攻擊等的過濾功能,需要的朋友可以參考下
這篇文章主要介紹了php實(shí)現(xiàn)的AES加密類定義與用法,結(jié)合完整實(shí)例形式分析了基于php的AES加密類實(shí)現(xiàn)及使用方法,需要的朋友可以參考下
這篇文章主要介紹了php 判斷IP為有效IP地址的方法,需要的朋友可以參考下
這篇文章主要介紹了PHP設(shè)計(jì)模式之注冊樹模式,結(jié)合實(shí)例形式詳細(xì)分析了注冊樹模式的概念、原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了PHP微信開發(fā)之微信錄音臨時(shí)轉(zhuǎn)永久存儲(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了php代碼實(shí)現(xiàn)mysql連接池效果,需要的朋友可以參考下
主站蜘蛛池模板: 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | CPSE安博会| 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 浇注料-高铝砖耐火砖-郑州凯瑞得窑炉耐火材料有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | 猎头招聘_深圳猎头公司_知名猎头公司| 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 青岛成人高考_山东成考报名网 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | POS机办理_个人pos机免费领取-银联pos机申请首页 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 |