java 发送http请求(提交form表单)

原创 2013年12月04日 10:29:21

 

写一个servlet用于测试请求

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Abc extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet");
		this.doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost");
		System.out.println("aaa : "+request.getParameter("aaa"));
		System.out.println("param1 : "+request.getParameter("param1"));
		
		System.out.println(request.getHeader("avc"));
		
		PrintWriter pw = response.getWriter();
		pw.write(request.getParameter("param1"));
		pw.flush();
		pw.close();
	}

}

 

web.xml配置文件

 <servlet>
    <description></description>
    <display-name>Abc</display-name>
    <servlet-name>Abc</servlet-name>
    <servlet-class>com.Abc</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Abc</servlet-name>
    <url-pattern>/Abc</url-pattern>
  </servlet-mapping>

 

抽象出一个工具请求类

package http;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.Map.Entry;

public class HttpUtil {

	public static String http(String url, Map<String, String> params) {
		URL u = null;
		HttpURLConnection con = null;
		// 构建请求参数
		StringBuffer sb = new StringBuffer();
		if (params != null) {
			for (Entry<String, String> e : params.entrySet()) {
				sb.append(e.getKey());
				sb.append("=");
				sb.append(e.getValue());
				sb.append("&");
			}
			sb.substring(0, sb.length() - 1);
		}
		System.out.println("send_url:" + url);
		System.out.println("send_data:" + sb.toString());
		// 尝试发送请求
		try {
			u = new URL(url);
			con = (HttpURLConnection) u.openConnection();
			//// POST 只能为大写,严格限制,post会不识别
			con.setRequestMethod("POST");
			con.setDoOutput(true);
			con.setDoInput(true);
			con.setUseCaches(false);
			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
			osw.write(sb.toString());
			osw.flush();
			osw.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (con != null) {
				con.disconnect();
			}
		}

		// 读取返回内容
		StringBuffer buffer = new StringBuffer();
		try {
			//一定要有返回值,否则无法把请求发送给server端。
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			String temp;
			while ((temp = br.readLine()) != null) {
				buffer.append(temp);
				buffer.append("\n");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return buffer.toString();
	}

}

 备注:一定要获取返回值,否则请求无法到达

readLine()为阻塞方法,会等待服务器的响应,否则会一直等待

con.setDoOutput(true); 这个表示是要发送请求到URL地址,没有这句话server是不会响应的。

参数的传递方式类似于在URL后面添加"?key=value&key1=value1"这种方式

 

 

测试类

@Test
	public void test3() {
		Map parames = new HashMap<String, String>();
		parames.put("param1", "param1_value");
		parames.put("param2", "param2_value");
		parames.put("param3", "param3_value");
		// 如果地址栏中有aaa这个参数,则默认选择地址栏的,如果没有则选择添加的参数
		parames.put("aaa", "aaa_value");
		HttpUtil.http("http://localhost:8080/a/Abc?aaa=dddd", parames);
	}

 

Java HttpUrlConnection form-data方式提交数据

网络请求连接代码如下: public static String openUrl(String url, RequestParameter parameter) throws Excepti...
  • mjh0508
  • mjh0508
  • 2013年06月27日 11:26
  • 8500

Java利用Http模拟表单提交

private static String sendPost(String url, NameValuePair[] params) {HttpClient client = new HttpClie...
  • YJ_VS_GY
  • YJ_VS_GY
  • 2015年08月27日 10:56
  • 1657

java模拟提交form表单

public static void connectionUrl(String username,String password){ String url = "http://loca...
  • baidu_34046383
  • baidu_34046383
  • 2016年11月28日 14:49
  • 4454

jsp提交表单与后台java处理表单

人员信息录入   人员信息 用户名: ...
  • qq_26222859
  • qq_26222859
  • 2016年07月04日 16:22
  • 3153

java 模拟表单方式提交上传文件

 做腾讯微信开发的时候,遇到多媒体文件的上传和下载 http请求方式: POST/FORM http://file.api.weixin.qq.com/cgi-bin/media/uplo...
  • zj8692286
  • zj8692286
  • 2014年11月07日 12:41
  • 13956

Java Web中表单数据的获取

1、 表单,是一种可以由用户输入,并提交给服务器端的一个图形界面,有如下性质: (1)表单中可以输入一些内容,这些输入功能由控件提供,叫做表单元素 2、提交的数据类型 分为...
  • suwu150
  • suwu150
  • 2016年05月12日 19:28
  • 7536

java web中表单提交的方式

在java web中表单提交的几种方法,本人才学疏浅,望大神帮我补充,       第一种也是最简单的方法就是在form 标签中加上一个action,action对应的就是你要将表单提交的地址,其中...
  • xulu_258
  • xulu_258
  • 2015年06月24日 16:55
  • 3152

通过HttpURLConnection模拟post表单提交

package junit; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; ...
  • hechurui
  • hechurui
  • 2016年01月04日 19:56
  • 5060

Javaweb获取表单数据的几种方式

Javaweb获取表单数据的几种方式一、通过键值对的形式获取表单数据 getParameter(String name):通过key,返回一个value。 getParameterValues(Str...
  • qq_33689414
  • qq_33689414
  • 2017年02月25日 17:08
  • 3526

Javaweb表单标签<form>标签

表单标签: 表单标签的作用是用于提交数据给服务器的。     表单标签的根标签是标签      常用的属性: action: 该属性是用于指定提交数据的地址。 method: 指定表单的提交方式。 ...
  • qq_15124475
  • qq_15124475
  • 2016年11月23日 17:21
  • 2159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 发送http请求(提交form表单)
举报原因:
原因补充:

(最多只允许输入30个字)