如何使用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请求的主要内容,如果未能解决你的问题,请参考以下文章