Java用2种方法模拟表单POST数据

Home / Article MrLee 2016-3-24 2855

模拟表单的意义我就不多说了,当然是为了不用浏览器就可以实现用户登录。然后可以获取一些其它的信息。我本站接口测试接口,至于其它网站可以自行找到登录接口,拿下面的表单举例

方法一:注意,这个非常重要 :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) 没有这个别人就会屏蔽你,知道你不是浏览器!
	public static void postRequest(String spec, String data) {
		try {
			URL url = new URL(spec);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("POST");
			con.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			con.setRequestProperty("User-Agent",
					"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
			con.setRequestProperty(
					"Accept",
					"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");
			con.setRequestProperty("Accept-Language", "zh-cn");
			con.setRequestProperty("UA-CPU", "x86");
			con.setRequestProperty("Content-type", "text/html");
			con.setRequestProperty("Connection", "close");
			con.setDoOutput(true);
			con.setDoInput(true);
			con.setUseCaches(false);
			OutputStreamWriter osw = new OutputStreamWriter(
					con.getOutputStream(), "UTF-8");
			osw.write(data);
			osw.flush();
			osw.close();
			int code = con.getResponseCode();
			System.out.println(code);
			if (code == 200) {
				InputStream is = con.getInputStream();
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(is));
				String line = reader.readLine();
				while (line != null) {
					System.out.println(line);
					line = reader.readLine();
				}
				reader.close();
				is.close();
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

String loginData = "username=sasss&password=cvcvc";
		 postRequest(lgUrl, loginData);

方法一的调用方法
这是Java标准版的实现,没有借助第三方库。那么接下来是第三方封装好的,使用起来就没有这么麻烦,人家已经封装好了很多参数!
方法二:
	public static void postByHttpClient(String url, String... strings) {
		try {
			if (strings.length % 2 != 0)
				return;// 参数不合法
			HttpClient client = HttpClients.createDefault();// 打开浏览器
			HttpPost post = new HttpPost(url);// 输入网址
			List parameters = new ArrayList();
			for (int i = 0; i < strings.length; i += 2) {
				// 封装表单
				parameters.add(new BasicNameValuePair(strings[i], strings[i+1]));
			}
			// 将参数传入post
			post.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));
			HttpResponse response = client.execute(post); // 执行post
			HttpEntity entity = response.getEntity(); // 获取响应数据
			String result = EntityUtils.toString(entity); // 将响应数据转成字符串
			System.out.println(result);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 
postByHttpClient(lgUrl, "username", "aaa", "password",
				"vvv");

是不是调用也非常方便 ,但是要3个jar库支持第二个方法。
下载jar文件: httpclient-4.5.2

本文链接:https://www.it72.com/8526.htm

推荐阅读
最新回复 (0)
返回