JavaでのHttpURLConnectionによる他のサーバとのデータ交換(xml)


目次
1.背景
2.HttpURLConnectionによる他のサーバへのアクセス
1.背景
   最近1つのプロジェクトをして、生放送の機能を実現する必要があります.そして、現在すでに1台のティーチングホストがあります.ティーチングホストの上にカメラをつなぎ、リモートでティーチングホストサーバーにログインして生中継アドレス(テンセント生放送など)をバインドすればいいです.この記事では、このような背景の下で、他のサーバとのデータ転送方法について説明します.
2.HttpURLConnectionによる他のサーバへのアクセス
  ネット上の資料には以下のようなものがたくさんあります.
  • このブログでは、HttpURLConnectionとHttpClientの浅い分析
  • を重点的に紹介しています.
  • このブログではajaxドメイン間問題(3つのソリューション)に重点を置いて説明しています.https://blog.csdn.net/u014727260/article/details/72793459

  • 本人はHttpURLConnectionを使用してティーチングホストにアクセスし、ティーチングホストはlinuxのサーバーであり、データの伝送フォーマットはXMLであり、双方はcgiインタフェースドキュメントに厳格に従って関連機能の呼び出しとデータ伝送を行う.linuxサーバの論理コードは、c++などの他の言語で、cgiプロトコルを満たすことができます.
    インタフェースドキュメントの形式は次のとおりです.
    
    
    
    
    
    
    	
    						
    	
    

    送信されたデータフォーマットはすべてxmlであるため、解析が必要であり、関連機能呼び出しツールが提供され、パケット名は自分で補完する必要があることを注意します.
  • HttpURLConnectionキット
  • package com.xxxxxxxxxx.util;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Map;
    
    
    public class HttpConnectUtil {
    
        /**
         *         
         * @param reqUrl
         * @param reqMethod
         * @return map
         * @throws Exception
         */
        public static Map ManageConnection(String reqUrl, String reqMethod , String messageXML) throws Exception {
            System.out.println(messageXML);
            URL url;
            String xml =messageXML;
            byte[] data = xml.getBytes("UTF-8");//   xml     
            url = new URL(reqUrl);
            MessageUtil messageUtil =new MessageUtil();
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setConnectTimeout(20* 1000);
            con.setReadTimeout(20* 1000);
            con.setRequestProperty("Cache-Control", "no-cache");
            con.setRequestProperty("Content-Type", "application/xml");
            con.setRequestProperty("Content-Length", String.valueOf(data.length));
            con.setRequestProperty("Charset", "UTF-8");
            if (null != reqMethod && !reqMethod.equals("")) {
                con.setRequestMethod(reqMethod);
            } else {
                con.setRequestMethod("GET");
            }
    
            //    
            if (!messageXML.isEmpty())
            {
                OutputStream outStream = con.getOutputStream();//     ,     ,    con.connect();
    
                outStream.write(data);
    
                outStream.flush();
    
                outStream.close();
    
                System.out.println("      ");
            }
    
            System.out.println("con.getResponseCode()"+con.getResponseCode());
           //    
            if (con.getResponseCode() == 200) {
    
                InputStream responseStream = con.getInputStream();
    
                System.out.println("      ");
    
                return messageUtil.parseXml(responseStream);
    
            }
            else
            {
                InputStream responseStream = con.getErrorStream();
    
                System.out.println("wrong      ");
    
                return messageUtil.parseXml(responseStream);
            }
    
    
        }
    
    }
    
    
    
    
  • SAXReaderを使用してxml
    package com.xxxxxxxx.util;
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.util.*;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class MessageUtil {
    
    
        public static Map xmlmap = new HashMap();
    
        //  xml       
        private static List elemList = new ArrayList();
    
        public static List getElemList() {
            return elemList;
        }
    
        public static void setElemList(List elemList) {
            MessageUtil.elemList = elemList;
        }
    
    
    
        /**
         *           (XML)
         *
         * @param responseStream
         * @return map
         * @throws Exception
         */
        public  Map parseXml(InputStream responseStream) throws Exception {
            //          
              xmlmap.clear();
              elemList.clear();
    
            //  request      
            InputStream inputStream = responseStream;
            System.out.println("     ");
           // printXml(inputStream);
    
            String a = null;
            byte[] data1 = new byte[inputStream.available()];
            inputStream.read(data1);
            //      
            a = new String(data1);
            System.out.println(a);
    
            //      
            SAXReader reader = new SAXReader();
            Document document = reader.read(new ByteArrayInputStream(a.getBytes("utf-8")));
    
            //   xml   
            Element root = document.getRootElement();
            xmlmap.put("root",root.getName());                                                        //  responsestatus
            //            
            getElementList(root);
            String x = getListString(elemList);
            System.out.println("-----------elemList    ------------");
            System.out.println(x);
           /* System.out.println("-----------xmlmap    ------------");
            System.out.println(xmlmap);*/
    
            //     
            inputStream.close();
            inputStream = null;
            return xmlmap;
        }
    
    
        /**
         *       
         *
         * @param element
         */
        public void getElementList(Element element) {
            List elements = element.elements();
            if (elements.size() == 0) {
                //     
                String xpath = element.getPath();
                //      
                String value = element.getTextTrim();
                elemList.add(xpath + " " + value);
            } else {
                //    
                //     iterator()        Iterator,elements      list
                for (Iterator it = elements.iterator(); it.hasNext(); ) {
                    //     Iterator next()   ,           
                    Element elem = (Element) it.next();
                    //    |  key  value    
                    if (xmlmap.containsKey(elem.getName())){
    
                        String oldValue =xmlmap.get(elem.getName());
                        xmlmap.put(elem.getName(), oldValue+"|"+elem.getText());
    
                    }
                    else { xmlmap.put(elem.getName(), elem.getText());}
    
                    //            
                    getElementList(elem);
                }
            }
        }
    
        public String getListString(List elemList) {
            StringBuffer sb = new StringBuffer();
            for (Iterator it = elemList.iterator(); it.hasNext(); ) {
                String str = it.next();
                sb.append(str + "
    "); } return sb.toString(); } private void printXml(InputStream in) throws Exception { String a = null; byte[] data1 = new byte[in.available()]; in.read(data1); // a = new String(data1); System.out.println(a); } }
    を解析