「java查看报文头」java解析json报文

博主:adminadmin 2023-01-21 05:51:08 282

今天给各位分享java查看报文头的知识,其中也会对java解析json报文进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

求java socket请求http的报文头格式!!!

手中不是自己的电脑 没环境调试不了 不过我找了下面的内容 你看有帮助没:

最近,需要编写一个工具模拟HTTP Client, 登录到一个Server并且要添加一些数据。出现的问题是:login可以成功,但是,添加数据时,总是报错如下:

HTTP/1.1 505 HTTP Version Not Supported

Server: Apache-Coyote/1.1

Date: Wed, 26 Aug 2009 03:20:19 GMT

Connection: close

根据错误的提示,应该是HTTP版本不一致,可是,第一次login都成功了,说明版本应该没有问题呀。

找了好多资料,都说版本有问题。

最后,终于找到最终的原因了,HTTP写的格式是非常严谨的,只要格式不匹配,就会报错误。

我在HTTP的头中添加一个空格:

HTTP/1.1[空格在此]

Accept: */*

Accept-Language: zh-cn

Host: 10.224.54.126:8080

Cookie: F5_CREDENTIAL=L7a

Connection: Keep-Alive

在提交请求,连login都不可以了,而且报的错误是:HTTP/1.1 505 HTTP Version Not Supported

从此可以推断出,我的添加数据的消息中可能某个地方多了一个空格。

经过仔细的查找,果然,找到了几个空格,用%20替代之,问题解决了。

另:我也在javaeye里面混,只是好久没去了,有机会交流交流

java如何编程实现,获取固定IP发来所有的数据包 ?

java获取固定IP发来所有的数据包,需要实现网络嗅探的部分功能:

代码如下;

/*******************

* JpcapTip.java

*/

package m;

import jpcap.PacketReceiver;

import jpcap.JpcapCaptor;

import jpcap.packet.*;

import jpcap.NetworkInterface;

import jpcap.NetworkInterfaceAddress;

//import java.net.InetAddress;

//import java.net.UnknownHostException;

public class JpcapTip implements PacketReceiver {

public void receivePacket(Packet packet) {

   System.out.println("********************************************");

   /*IP数据报报文头*/

   byte[] l=packet.header;     

   /*

   for (int t=0;t21;t++){

    System.out.print(l[t]+" *** ");

   }

   */

   String str="";

    System.out.print("报文头 : ");

    for (int i=0;il.length;i++) {

     //str=str+l;

     int m=0;

     m=l[i];

     m=m24;

     m=m24;

     str=str+Integer.toHexString(m);

     //System.out.print("     ***     "+l[i]);

    }

   System.out.println(str);

   int d=l.length;

   System.out.println("首部长度 :"+(d*8)+"bit");

  

   /*分析源IP地址和目的IP地址*/

   /*分析协议类型*/

   /**

   if(packet.getClass().equals(IPPacket.class)) {

    IPPacket ipPacket=(IPPacket)packet;

    byte[] iph=ipPacket.option;

    String iphstr=new String(iph);

    System.out.println(iphstr);

   }

   */

   if(packet.getClass().equals(ARPPacket.class))

   {

    System.out.println("协议类型 :ARP协议");

    try {

     ARPPacket arpPacket = (ARPPacket)packet;

     System.out.println("源网卡MAC地址为 :"+arpPacket.getSenderHardwareAddress());

     System.out.println("源IP地址为 :"+arpPacket.getSenderProtocolAddress());

     System.out.println("目的网卡MAC地址为 :"+arpPacket.getTargetHardwareAddress());

     System.out.println("目的IP地址为 :"+arpPacket.getTargetProtocolAddress());

} catch( Exception e ) {

     e.printStackTrace();

    } 

   }

   else 

    if(packet.getClass().equals(UDPPacket.class))

    {

     System.out.println("协议类型 :UDP协议");

     try {

      UDPPacket udpPacket = (UDPPacket)packet;

      System.out.println("源IP地址为 :"+udpPacket.src_ip);

      int tport = udpPacket.src_port;

      System.out.println("源端口为:"+tport);

      System.out.println("目的IP地址为 :"+udpPacket.dst_ip);

      int lport = udpPacket.dst_port;

      System.out.println("目的端口为:"+lport);

     } catch( Exception e ) {

      e.printStackTrace();

     } 

    }

   else

    if(packet.getClass().equals(TCPPacket.class)) {

     System.out.println("协议类型 :TCP协议");

     try {

      TCPPacket tcpPacket = (TCPPacket)packet;

      int tport = tcpPacket.src_port;

      System.out.println("源IP地址为 :"+tcpPacket.src_ip);

      System.out.println("源端口为:"+tport);

      System.out.println("目的IP地址为 :"+tcpPacket.dst_ip);

      int lport = tcpPacket.dst_port;

      System.out.println("目的端口为:"+lport);

     } catch( Exception e ) {

      e.printStackTrace();

     }

    }

   else

    if(packet.getClass().equals(ICMPPacket.class))

     System.out.println("协议类型 :ICMP协议");

   else

     System.out.println("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4");

/*IP数据报文数据*/

   byte[] k=packet.data;   

   String str1="";

    System.out.print("数据 : ");

     for(int i=0;ik.length;i++) {

      //int m=0;

      //m=k[i];

      //m=m24;

      //m=m24;

      //str1=str+Integer.toHexString(m);

      str1 = new String(k);

      //str1=str1+k[i];

      //System.out.print("     ***     "+k[i]);

     }

     System.out.println(str1);

   System.out.println("数据报类型 : "+packet.getClass());

   System.out.println("********************************************");

}

public static void main(String[] args) throws Exception{

   // TODO 自动生成方法存根

  

   NetworkInterface[] devices = JpcapCaptor.getDeviceList();        //.getDeviceList();.

   //for (int i =0; idevices.length;i++) {

    int a=0;

    //try {

    /*本地网络信息*/

    byte[] b=devices[1].mac_address; //网卡物理地址

    //}

    //catch() {}

    System.out.print("网卡MAC : 00");   

    for (int j=0;jb.length;j++){

     //a=a8;

     a=b[j];

     a=a24;

     a=a24;

     System.out.print(Integer.toHexString(a));

    }

    System.out.println();

    NetworkInterfaceAddress[] k=devices[1].addresses;

   

    //System.out.println("网卡MAC : "+Integer.toHexString(a));

    for(int n=0;nk.length;n++) {

     System.out.println("本机IP地址 : "+k[n].address);     //本机IP地址

     System.out.println("子网掩码   : "+k[n].subnet);      //子网掩码

    }

    System.out.println("网络连接类型 : "+devices[1].datalink_description);

   //}

   NetworkInterface deviceName = devices[1];

   /*将网卡设为混杂模式下用网络设备deviceName*/

   JpcapCaptor jpcap =JpcapCaptor.openDevice(deviceName, 2000, false, 1);           //openDevice(deviceName,1028,false,1);

   jpcap.loopPacket(-1,new JpcapTip());

}

}

如何实现java解析网络协议报文

普通参数:

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: 8bit

文件参数:

Content-Type: application/octet-stream

Content-Transfer-Encoding: binary

参数实体的最后一行是: --加上boundary加上--,最后换行,这里的 格式即为: --OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp--。

模拟文件上传请求

public static void uploadFile(String fileName) {

try {

// 换行符

final String newLine = "\r\n";

final String boundaryPrefix = "--";

// 定义数据分隔线

String BOUNDARY = "========7d4a6d158c9";

// 服务器的域名

URL url = new URL("");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 设置为POST情

conn.setRequestMethod("POST");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

// 设置请求头参数

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

OutputStream out = new DataOutputStream(conn.getOutputStream());

// 上传文件

File file = new File(fileName);

StringBuilder sb = new StringBuilder();

sb.append(boundaryPrefix);

sb.append(BOUNDARY);

sb.append(newLine);

// 文件参数,photo参数名可以随意修改

sb.append("Content-Disposition: form-data;name=\"photo\";filename=\"" + fileName

+ "\"" + newLine);

sb.append("Content-Type:application/octet-stream");

// 参数头设置完以后需要两个换行,然后才是参数内容

sb.append(newLine);

sb.append(newLine);

// 将参数头的数据写入到输出流中

out.write(sb.toString().getBytes());

// 数据输入流,用于读取文件数据

DataInputStream in = new DataInputStream(new FileInputStream(

file));

byte[] bufferOut = new byte[1024];

int bytes = 0;

// 每次读1KB数据,并且将文件数据写入到输出流中

while ((bytes = in.read(bufferOut)) != -1) {

out.write(bufferOut, 0, bytes);

}

// 最后添加换行

out.write(newLine.getBytes());

in.close();

// 定义最后数据分隔线,即--加上BOUNDARY再加上--。

byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)

.getBytes();

// 写上结尾标识

out.write(end_data);

out.flush();

out.close();

// 定义BufferedReader输入流来读取URL的响应

// BufferedReader reader = new BufferedReader(new InputStreamReader(

// conn.getInputStream()));

// String line = null;

// while ((line = reader.readLine()) != null) {

// System.out.println(line);

// }

} catch (Exception e) {

System.out.println("发送POST请求出现异常!" + e);

e.printStackTrace();

}

}

javaweb里get请求头报文信息含义是什么啊

常见的HTTP报文头属性

Accpet

告诉服务端,客户端接收什么类型的响应

Referer

表示这是请求是从哪个URL进来的,比如想在网上购物,但是不知道选择哪家电商平台,你就去问度娘,说哪家电商的东西便宜啊,然后一堆东西弹出在你面前,第一给就是某宝,当你从这里进入某宝的时候,这个请求报文的Referer就是

Cache-Control

对缓存进行控制,如一个请求希望响应的内容在客户端缓存一年,或不被缓可以通过这个报文头设置

Accept-Encoding

例如:Accept-Encoding:gzip, deflate(这两种都是压缩格式)

这个属性是用来告诉服务器能接受什么编码格式,包括字符编码,压缩形式(一般都是压缩形式)

Host

指定要请求的资源所在的主机和端口

User-Agent 作用:告诉服务器,客户端使用的操作系统、浏览器版本和名称

Java Web调http接口发送的XML那种报文怎么看,我想看我发送的报文格式是否与人家的样例一样

其实很多种方法可以看,你可以将报文转换成string,或者下载一个http监控器,例如fiddler2这样的工具,可以看到所有请求的数据的,希望深圳远标培训中心能帮到你!

关于java查看报文头和java解析json报文的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。