如何使用java模拟post请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用java模拟post请求相关的知识,希望对你有一定的参考价值。

/**
     * 向指定 URL 发送POST方法的请求
     * 
     * @param url
     *            发送请求的 URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) 
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try 
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) 
                result += line;
            
         catch (Exception e) 
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        
        //使用finally块来关闭输出流、输入流
        finally
            try
                if(out!=null)
                    out.close();
                
                if(in!=null)
                    in.close();
                
            
            catch(IOException ex)
                ex.printStackTrace();
            
        
        return result;
    

参考技术A 两种选择:一、使用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&¶ms.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();

本回答被提问者采纳

如何使用Fiddler2模拟POST和Get提交数据

参考技术A Fiddler工具是一个http协议调试代理工具,它可以帮助程序员测试或调试程序,辅助web开发。
Fiddler工具可以发送向服务端发送特定的HTTP请求以及接受服务器回应的请求和数据,是web调试的利器。
使用Fiddler也可以像Firefox浏览器中的RestClient工具一样,去调试post请求(带有json格式的数据)以及get请求(Header方式传参),方法如下:

一、使用Fiddler调试post请求(带有json格式的数据)
1.打开Fiddler(可以去官网下载http://www.telerik.com/fiddler),打开Composer面板(此面板可以模拟向相应的服务器发送数据的过程),在Composer面板中,可以看到如下图的界面:
Composer面板界面
2.在Composer面板中的第一个下拉框中选择Post请求方式。

3.填写请求的URL,比如:
http://10.134.218.34:8080/starCWebEvaluation/jaxrs/weightSetService/saveTotalWeightOfEvaluation
4.Request Headers中输入:
Content-Type: application/json; charset=utf-8
Content-Length: 398 (也可以不输入)
5.在Request Body中输入json数据,比如:

“siteId”:”680004011001571”,
“learnTimeWeight”:30,
“workWeight”:30,
“testWeight”:30,
“forumWeight”:30,
“status”:1

6.点击Execute执行,若结果返回200表示操作成功!

二、使用Fiddle调试get请求(Header方式传参)

1.打开Fiddler(可以去官网下载http://www.telerik.com/fiddler),打开Composer面板(此面板可以模拟向相应的服务器发送数据的过程),在Composer面板中,可以看到如下图的界面:
Composer面板界面
2.在Composer面板中的第一个下拉框中默认是get请求方式。

3.填写请求的URL,比如:
http://212.214.33.68:21563/starCWebEvaluation/jaxrs/weightSetService/getTotalWeightBySiteId
4.Request Headers中输入:siteId: 680004011001521111111
这里写图片描述
5.在Request Body中不需要输入任何东西。
6.点击Execute执行,若结果返回200表示操作成功!
参考技术B 为get提交时,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
为post提交时,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上 Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件 name)等信息,并加上分割符(boundary)。
参考技术C 1.首先,开发的朋友如不熟悉这个,先自己到百度一个,这里我就不介绍Fiddler2了哦。
2.了解后,自己去下载个,貌似Fiddler2下载网址不能放额,自己也百度搜索下,很方便下载的。
3.记得自己下载后,安装电脑,恩,然后一切准备就绪。

1.打开我们Fiddler2程序,开始咯(这个刚好英文版的,可以去下载汉化包)

这个要根据图片来,图中标记需要分别介绍下
图标记1: 这个是请求状态和结果的显示区域
图标记2: 请求的方法选择,常用的就是POST请求和GET请求方式
图标记3: 请求的地址输入框
图标记4: 我们提交的数据输入框
图标记5: 这个是我们请求的数据头输入框
图标记6: 点击这个Execute按钮,就可以提交我们的模拟请求

首先使用Fiddler2模拟GET请求
1.在地址输入框里面模拟的GET请求地址(已被遮罩了,你们懂得)
2.选择请求的方法,这里我们选择GET方法
3.点击Execute按钮,就可以执行模拟请求
4.在显示区域就可以看到我们刚刚提交的请求
5.直接双击显示区域里面的请求记录,就可以看到我们的GET方法的数据

然后使用Fiddler2模拟POST请求
1.在地址输入框里面模拟的POST请求地址(已被遮罩了,你们懂得)
2.选择请求的方法,这里我们选择POST方法
3.在提交的数据输入框里面输入我们提交的POST数据
3.点击Execute按钮,就可以执行模拟请求
4.在显示区域就可以看到我们刚刚提交的请求
5.直接双击显示区域里面的请求记录,就可以看到我们的POST方法的数据
注意事项
在Fiddler2模拟POST请求的时候,在请求头的输入框里面,需要设置 ContentType:application/x-www-form-urlencoded

以上是关于如何使用java模拟post请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Fiddler2模拟POST和Get提交数据

如何在 ruby​​-on-rails 应用程序上使用 Rack 发送 POST 模拟请求?

java模拟post请求发送json

JAVA模拟HTTP post请求上传文件

如何使用Qt进行post get模拟登录

如何使用java发送post请求