Maison >développement back-end >tutoriel php >Analyse des étapes d'utilisation de PHP CURL et Java http
Cette fois, je vais vous présenter l'analyse étape par étape de l'utilisation de PHP CURL et java http Quelles sont les précautions lors de l'utilisation de PHP CURL et java http. Ce qui suit est un cas pratique, voyons. jetez un oeil.
php curl
Parfois, nos projets doivent interagir avec des plateformes tierces. Donnez un exemple.
Il existe actuellement deux plateformes, A et B. Au cours de la période initiale, la partie A a mis en œuvre certaines activités clés (telles que les informations sur les utilisateurs, etc.). Ensuite, pour certaines raisons, certaines activités doivent être implémentées par B, et le programme d'implémentation appelle certaines interfaces sensibles qui ne peuvent fonctionner que sur le serveur côté B, de sorte que l'interaction entre les deux plates-formes ne peut se faire. curl est la solution à ce problème.
curl est une extension php, vous pouvez la considérer comme un navigateur simplifié qui peut accéder à d'autres sites Web.
Pour utiliser curl, vous devez activer la configuration appropriée dans php.ini pour l'utiliser.
Les formats de données couramment utilisés pour l'interaction entre les plates-formes incluent json, xml et d'autres formats de données populaires.
<?php @param $url 接口地址 $https 是否是一个Https 请求 $post 是否是post 请求 $post_data post 提交数据 数组格式 function curlHttp($url,$https = false,$post = false,$post_data = array()) { $ch = curl_init(); //初始化一个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; } ?>
Maintenant l'adresse de l'interface http://www.xxxxx.com/api/{sid} Cette adresse d'interface peut renvoyer le format de données json d'un utilisateur via la méthode get , puis nous comment obtenir les données de la plate-forme tierce
<?php $sid = 1; $url = "http://www.xxxxx.com/api/{$sid}"; $data = curlHttp($url); $user = json_decode($data,true); ?>
où $user doit obtenir les informations sur le tableau utilisateur.
Ici, curl simule un navigateur pour faire une demande d'obtention du nom de domaine (bien sûr, selon nos réglages dans les paramètres, nous pouvons également simuler des post https et d'autres demandes) et obtient les données de réponse.
java http implémente des fonctions similaires à php curl
java est un langage complètement orienté objet je pense sauf que le nom de l'objet est long. assez Pas facile à retenir. Tout le reste va bien, et il est d'abord compilé en bytecode puis exécuté par la machine virtuelle Java, contrairement à php qui doit être compilé et exécuté à chaque fois.
Implémentation Java de php curl
File 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; } }
Ensuite, une utilisation similaire de php est la suivante
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数据结果 } }
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!