java模拟发送数据代码 java模拟发送post请求

如何用java模拟ajax数据发送请求import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.io.*;
public class HttpClientTutorial {
PRivate static String url = "";
public static void method(HttpClient client,String url,String body){
PostMethodmethod = new PostMethod(url);
//"count":10,"ignoreCase":"false","paras":["a%"],"queryId":"getMenu"
NameValuePair[] postData = https://www.04ip.com/post/new NameValuePair[]{};
//postData[0] = new NameValuePair("count", 10);
method.setRequestBody(body);//addParameters(postData);

// Provide custom retry handler is necessary
/*method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));*/
try {
// Execute the method.
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "method.getStatusLine());
}
// Read the response body.
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary data
System.out.println(new String(responseBody,"utf-8"));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: "e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: "e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
}
}
public static void main(String[] args) {
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
String body ="[{\"userId\":1,\"passWord\":1}]";
// Create a method instance.
method(client,url,body);
url = "";
body = "[{\"count\":10,\"ignoreCase\":\"false\",\"paras\":[\"a%\"],\"queryId\":\"getMenu\"}]";
method(client,url,body);
}
}
如何用java 模拟发送 HTTP数据包 , 该如何处理左边是发送,右边是接收 ,
同时左右两边都能实现发送与接收
关于JAVA模拟发送post请求并响应内容如果你是用java的api实现的模拟post请求,那么你需要在你之前构造的http request的header里加上
Cookie:名字=值 然后统一包装成你的conenction的OutputStream 。
建议你用apache的HttpClient api项目 , 里面有专门处理cookie的api,这样事情就简单许多 。
TCP/IP协议 怎么用JAVA发送和接收二进制数据 要具体实例1.TCP/IP协议要求信息必须在块(chunk)中发送和接收,而块的长度必须是8位的倍数,因此 , 我们可以认为TCP/IP协议中传输的信息是字节序列 。如何发送和解析信息需要一定的应用程序协议 。
2.信息编码:
首先是Java里对基本整型的处理,发送时,要注意:1)每种数据类型的字节个数;2)这些字节的发送顺序是怎样的?(little-endian还是
big-endian);3)所传输的数值是有符号的(signed)还是无符号的(unsigned) 。具体编码时采用位操作(移位和屏蔽)就可以了 。
具体在Java里 , 可以采用DataOutputStream类和ByteArrayOutputStream来实现 。恢复时可以采用
DataInputStream类和ByteArrayInputStream类 。
其次,字符串和文本,在一组符号与一组整数之间的映射称为编码字符集(coded character
set) 。发送者与接收者必须在符号与整数的映射方式上达成共识 , 才能使用文本信息进行通信,最简单的方法就是定义一个标准字符集 。具体编码时采用
String的getBytes()方法 。
最后,位操作 。如果设置一个特定的设为1,先设置好掩码(mask),之后用或操作;要清空特定一位 , 用与操作 。
3.成帧与解析
成?。╢raming)技术解决了接收端如何定位消息的首位位置的问题 。
如果接收者试图从套接字中读取比消息本身更多的字节 , 将可能发生以下两种情况之一:如果信道中没有其他消息 , 接收者将阻塞等待,同时无法处理接收
到的消息;如果发送者也在等待接收端的响应消息,则会形成死锁(dealock);另一方面,如果信道中还有其他消息,则接收者会将后面消息的一部分甚至
全部读到第一条消息中去,这将产生一些协议错误 。因此,在使用TCP套接字时,成帧就是一个非常重要的考虑因素 。
有两个技术:
1.基于定界符(Delimiter-based):消息的结束由一个唯一的标记(unique
marker)指出,即发送者在传输完数据后显式添加的一个特殊字节序列 。这个特殊标记不能在传输的数据中出现 。幸运的是,填充(stuffing)技术
能够对消息中出现的定界符进行修改,从而使接收者不将其识别为定界符 。在接收者扫描定界符时,还能识别出修改过的数据,并在输出消息中对其进行还原,从而
使其与原始消息一致 。
2.显式长度(Explicit length):在变长字段或消息前附加一个固定大小的字段 , 用来指示该字段或消息中包含了多少字节 。这种方法要确定消息长度的上限,以确定保存这个长度需要的字节数 。
接口:
Java代码import java.io.IOException;import java.io.OutputStream;public interface Framer {void frameMsg(byte [] message,OutputStream out) throws IOException;byte [] nextMsg() throws IOException;}
定界符的方式:
Java代码import java.io.ByteArrayOutputStream;import java.io.EOFException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class DelimFramer implements Framer {private InputStream in;//data source;private static final byte DELIMTER=(byte)'\n';//message delimiterpublic DelimFramer(InputStream in){this.in=in;}@Overridepublic void frameMsg(byte[] message, OutputStream out) throws IOException {//ensure that the message dose not contain the delimiterfor(byte b:message){if(b==DELIMTER)throw new IOException("Message contains delimiter");}out.write(message);out.write(DELIMTER);out.flush();}@Overridepublic byte[] nextMsg() throws IOException {ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream();int nextByte;while((nextByte=in.read())!=DELIMTER){if(nextByte==-1){//end of stream?if(messageBuffer.size()==0){return null;}else{throw new EOFException("Non-empty message without delimiter");}}messageBuffer.write(nextByte);}return messageBuffer.toByteArray();}}
显式长度方法:
Java代码import java.io.DataInputStream;import java.io.EOFException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class LengthFramer implements Framer {public static final int MAXMESSAGELENGTH=65535;public static final int BYTEMASK=0xff;public static final int SHOTMASK=0xffff;public static final int BYTESHIFT=8;private DataInputStream in;// wrapper for data I/Opublic LengthFramer(InputStream in) throws IOException{this.in=new DataInputStream(in);}@Overridepublic void frameMsg(byte[] message, OutputStream out) throws IOException {if(message.lengthMAXMESSAGELENGTH){throw new IOException("message too long");}//write length prefixout.write((message.lengthBYTEMASK)BYTEMASK);out.write(message.lengthBYTEMASK);//write messageout.write(message);out.flush();}@Overridepublic byte[] nextMsg() throws IOException {int length;try{length=in.readUnsignedShort();}catch(EOFException e){//no (or 1 byte) message;return null;}//0=length=65535;byte [] msg=new byte[length];in.readFully(msg);//if exception,it's a framing error;return msg;}}
如何用java模拟提交数据给页面然后获取返回的数据你是想做到JSP页面不加入%%这种小脚本吧,那可以采用EL表达式,或者一些框架的输出方式,通常用EL就可以了,因为EL就是用来运算和表达的 。后台获取数据以后,这个数据可以是一个简单类型,也可以是一个对象,如果是同一个请求下的,也就是request对象没有变,那么可以用这个存储,否则要用session存储 , 存储数据的对象是JSP内置的对象,有page,request,session , application等,每个对象都能存储数据 , 但是作用于不同,page针对当前页面,request针对一个请求,session针对一个会话,application针对整个应用程序 。通常session就可以了 。比如后台获取一个String的name值,那么你可以session.setAttribute("name",name); 那么JSP直接可以EL这样写:${sessionScope.name} 获取这个值,这里的name是后台封装的键的名,不是后面变量name的名 。
【java模拟发送数据代码 java模拟发送post请求】java模拟发送数据代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java模拟发送post请求、java模拟发送数据代码的信息别忘了在本站进行查找喔 。

    推荐阅读