如何使用java模拟post请求

时间:2022-03-25 17:01:51
如题。现在网上有很多关于模拟post的博客和帖子,加入知道一个post请求的request={"a":"0","b":"1","c":"2"}如何设置post的参数

5 个解决方案

#1


自己都说网上有好多例子了,找一个改改。

#2


如何使用java模拟post请求
网上找个例子 httppost请求··· http通讯啊···

#3


如果你想模拟,两种选择:一、使用httpclient,二使用java自带的类库。
1、java自带类库:

public static String call(String address,String params) {
URL url = null;
HttpURLConnection httpurlconnection = null;
StringBuilder result = new StringBuilder();
try {
url = new URL(address);
// 以post方式请求
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoOutput(true);
httpurlconnection.setRequestMethod("POST");
if(null!=params&&params.length()>0){
httpurlconnection.getOutputStream().write(params.getBytes());
httpurlconnection.getOutputStream().flush();
httpurlconnection.getOutputStream().close();
}
// 获取页面内容
java.io.InputStream in = httpurlconnection.getInputStream();
java.io.BufferedReader breader = new BufferedReader(new InputStreamReader(in, Config.DEFAULT_CHARSET));
String str = breader.readLine();
while (str != null) {
result.append(str);
str = breader.readLine();
}
breader.close();
in.close();
} catch (Exception e) {

} finally {
if (httpurlconnection != null)
httpurlconnection.disconnect();
}
return result.toString().trim();
}

2、httpclient:

public static String post(String url,String params){
                HttpClient httpClient = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
HttpPost post = new HttpPost(url);
try {
if(null!=params){
post.setEntity(new StringEntity(params,"UTF-8"));
}
HttpResponse resp = httpClient.execute(post);
int statusCode = resp.getStatusLine().getStatusCode();
if(statusCode<=304){
HttpEntity entity = resp.getEntity();
if (entity == null) {
            throw new IllegalArgumentException("HTTP entity may not be null");
        }
if (entity.getContentLength() > Integer.MAX_VALUE) {
                throw new IllegalArgumentException("HTTP entity too large to be buffered in memory");
            }
int i = (int)entity.getContentLength();
i = i<0 ? 4096 : i;
final InputStream instream = entity.getContent();
final Reader reader = new InputStreamReader(instream, Config.DEFAULT_CHARSET);
        final CharArrayBuffer buffer = new CharArrayBuffer(i);
        final char[] tmp = new char[1024];
        int l;
        while((l = reader.read(tmp)) != -1) {
         buffer.append(tmp, 0, l);
        }
        builder.append(buffer);
}
post.abort();
} catch (Exception e) {
post.abort();

return builder.toString().trim();
}

#4


引用 1 楼 fangmingshijie 的回复:
自己都说网上有好多例子了,找一个改改。

那些例子我都改好了,主要是那个post参数,不知道如何对应。能否给普及下

#5


已经解决,开始结贴

#1


自己都说网上有好多例子了,找一个改改。

#2


如何使用java模拟post请求
网上找个例子 httppost请求··· http通讯啊···

#3


如果你想模拟,两种选择:一、使用httpclient,二使用java自带的类库。
1、java自带类库:

public static String call(String address,String params) {
URL url = null;
HttpURLConnection httpurlconnection = null;
StringBuilder result = new StringBuilder();
try {
url = new URL(address);
// 以post方式请求
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoOutput(true);
httpurlconnection.setRequestMethod("POST");
if(null!=params&&params.length()>0){
httpurlconnection.getOutputStream().write(params.getBytes());
httpurlconnection.getOutputStream().flush();
httpurlconnection.getOutputStream().close();
}
// 获取页面内容
java.io.InputStream in = httpurlconnection.getInputStream();
java.io.BufferedReader breader = new BufferedReader(new InputStreamReader(in, Config.DEFAULT_CHARSET));
String str = breader.readLine();
while (str != null) {
result.append(str);
str = breader.readLine();
}
breader.close();
in.close();
} catch (Exception e) {

} finally {
if (httpurlconnection != null)
httpurlconnection.disconnect();
}
return result.toString().trim();
}

2、httpclient:

public static String post(String url,String params){
                HttpClient httpClient = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
HttpPost post = new HttpPost(url);
try {
if(null!=params){
post.setEntity(new StringEntity(params,"UTF-8"));
}
HttpResponse resp = httpClient.execute(post);
int statusCode = resp.getStatusLine().getStatusCode();
if(statusCode<=304){
HttpEntity entity = resp.getEntity();
if (entity == null) {
            throw new IllegalArgumentException("HTTP entity may not be null");
        }
if (entity.getContentLength() > Integer.MAX_VALUE) {
                throw new IllegalArgumentException("HTTP entity too large to be buffered in memory");
            }
int i = (int)entity.getContentLength();
i = i<0 ? 4096 : i;
final InputStream instream = entity.getContent();
final Reader reader = new InputStreamReader(instream, Config.DEFAULT_CHARSET);
        final CharArrayBuffer buffer = new CharArrayBuffer(i);
        final char[] tmp = new char[1024];
        int l;
        while((l = reader.read(tmp)) != -1) {
         buffer.append(tmp, 0, l);
        }
        builder.append(buffer);
}
post.abort();
} catch (Exception e) {
post.abort();

return builder.toString().trim();
}

#4


引用 1 楼 fangmingshijie 的回复:
自己都说网上有好多例子了,找一个改改。

那些例子我都改好了,主要是那个post参数,不知道如何对应。能否给普及下

#5


已经解决,开始结贴