Cómo implementar Java para analizar mensajes de protocolo de red
Parámetros comunes:
Tipo de contenido: texto/plain; charset=UTF-8
Codificación de transferencia de contenido: 8 bits
Parámetros de archivo:
Tipo de contenido: aplicación/flujo de octeto
Codificación de transferencia de contenido: binario
La última línea de la entidad de parámetro es: -- Agregue límite más -- y finalmente rompa la línea. El formato aquí es: --OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp--.
Simular solicitud de carga de archivo
subida pública estática vacía (String fileName) {
prueba {
// Carácter de nueva línea
final String newLine = "\r\n";
final String borderPrefix = "--";
// Definir la línea de separación de datos
String BOUNDARY = "========7d4a6d158c9";
// Nombre de dominio del servidor
URL url = nueva URL("www.myhost.com")
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Establecer estado POST
conn.setRequestMethod("POST");
p>// Las siguientes dos líneas deben configurarse para enviar una solicitud POST
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// Establecer parámetros del encabezado de solicitud
conn.setRequestProperty("connection", "Keep-Alive");
conn .setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; limite=" + LÍMITE );
OutputStream out = new DataOutputStream(conn.getOutputStream());
// Subir archivo
Archivo archivo = new File(fileName);
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb .append(newLine);
// Los parámetros de archivo y los nombres de los parámetros de la foto se pueden modificar a voluntad
sb.append("Content-Disposition: form-data;name=\" foto\";nombre de archivo=\"" + nombre de archivo
+ "\"" + nuevaLínea);
sb.append("Tipo de contenido: aplicación/flujo de octeto") ;
// Después de configurar el encabezado del parámetro, se requieren dos saltos de línea, seguidos del contenido del parámetro
sb.append(newLine);
sb. append(newLine);
//Escribe los datos del encabezado del parámetro en el flujo de salida
out.write(sb.toString().getBytes());
// Flujo de entrada de datos, uso para leer datos de archivos
DataInputStre
estoy en = new DataInputStream(new FileInputStream(
archivo));
byte[] bufferOut = nuevo byte[1024];
int bytes = 0;
//Lee datos de 1 KB cada vez y escribe los datos del archivo en el flujo de salida
while ((bytes = in.read(bufferOut)) != -1) { p>
out.write(bufferOut, 0, bytes);
}
// Agrega una nueva línea al final
out.write( newLine .getBytes());
in.close();
// Defina la línea separadora de datos final, es decir, -- más LÍMITE más --.
byte[] end_data = (nuevaLínea + límitePrefijo + LÍMITE + límitePrefijo + nuevaLínea)
.getBytes();
// Escribir la marca de final p> p>
out.write(end_data);
out.flush();
out.close();
// Definir BufferedReader input Stream para leer la respuesta de la URL
// BufferedReader Reader = new BufferedReader(new InputStreamReader(
// conn.getInputStream()));
/ / Línea de cadena = null;
// while ((line = lector.readLine()) != null) {
// System.out.println(line );
// }
} catch (Exception e) {
System.out.println("¡Ocurrió una excepción al enviar la solicitud POST!" + e);
p>e.printStackTrace();
}
}