JavaでのHttpURLConnectionによる他のサーバとのデータ交換(xml)
7166 ワード
目次
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キット SAXReaderを使用してxml
1.背景
2.HttpURLConnectionによる他のサーバへのアクセス
1.背景
最近1つのプロジェクトをして、生放送の機能を実現する必要があります.そして、現在すでに1台のティーチングホストがあります.ティーチングホストの上にカメラをつなぎ、リモートでティーチングホストサーバーにログインして生中継アドレス(テンセント生放送など)をバインドすればいいです.この記事では、このような背景の下で、他のサーバとのデータ転送方法について説明します.
2.HttpURLConnectionによる他のサーバへのアクセス
ネット上の資料には以下のようなものがたくさんあります.
本人はHttpURLConnectionを使用してティーチングホストにアクセスし、ティーチングホストはlinuxのサーバーであり、データの伝送フォーマットはXMLであり、双方はcgiインタフェースドキュメントに厳格に従って関連機能の呼び出しとデータ伝送を行う.linuxサーバの論理コードは、c++などの他の言語で、cgiプロトコルを満たすことができます.
インタフェースドキュメントの形式は次のとおりです.
送信されたデータフォーマットはすべてxmlであるため、解析が必要であり、関連機能呼び出しツールが提供され、パケット名は自分で補完する必要があることを注意します.
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);
}
}
}
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);
}
}
を解析