`

请求远程服务传参和过大参数的函数

阅读更多

    两个Code,第一个函数是普通请求,Like:http://ip:port/server/xxx.do?para1=&para2

    第二个函数是隐藏parameter的请求,同样也可以提交大于255字节的URL请求。(IE和Firefox要求不同),Like:http://ip:port/server/xxx.do.

 

public String postServerUrl(Object obj,String postMethod) throws IOException, Throwable, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException{
		// Get and config the connection.		
		HttpURLConnection conn;
		URL requestServiceUrl = new URL(getWebServerUrl()+postMethod+"?"+covertParameter(obj));
		System.out.println(requestServiceUrl.toString());		
		conn = (HttpURLConnection) requestServiceUrl.openConnection();
		conn.setDoOutput(true);
		conn.setDoInput(true);
		conn.setRequestMethod("POST");
		conn.setUseCaches(false);		
		conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
		conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");		
		conn.setInstanceFollowRedirects(true);
		conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
		// Get the response.
		InputStream is = conn.getInputStream();
		String rc = IOUtils.toString(is);
		return rc;
	}

 第二个,其中参数内定为:questionData,相当于本地的Form把一个大对象提交到远程服务器上。

public String postProcessResponseUrl(String questionData,String postMethod) throws IOException, Throwable, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException{
		// Get and config the connection.		
		HttpURLConnection conn;
		URL requestServiceUrl = new URL(getWebServerUrl()+postMethod);
		System.out.println(requestServiceUrl.toString());		
		conn = (HttpURLConnection) requestServiceUrl.openConnection();
		conn.setDoOutput(true);
		conn.setDoInput(true);
		conn.setRequestMethod("POST");
		conn.setUseCaches(false);		
		conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
		conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
		
		conn.setInstanceFollowRedirects(true);
		conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
		// Get the response.
		PrintWriter out = new PrintWriter(conn.getOutputStream());
		String name = "questionData="+URLEncoder.encode(questionData, "UTF-8"); 
		System.out.println(name);
        // send the encoded message
        out.println(name);
        out.close();
		InputStream is = conn.getInputStream();
		String rc = IOUtils.toString(is);
		return rc;
	}

   好了,还有一个使用到的函数:(使用了注射机制)

private String covertParameter(Object obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		String Parameter = "";
		Field[] fields = obj.getClass().getFields();
		for (int i=0;i<fields.length;i++){
			String fileldName= fields[i].getName();
			Method getMethod = obj.getClass().getMethod("get"+fileldName.substring(0,1).toUpperCase()+fileldName.substring(1), new Class[]{});
			Object value = getMethod.invoke(obj, new Object[]{});
			value = value==null?"":value;
			if (i>0){
				Parameter+="&";
			}			
			Parameter += fields[i].getName()+"="+value.toString();
		}		
		return Parameter;
	}

    如有疑问请留言。

 

分享到:
评论

相关推荐

    VBS的函数集-读写二进制文件,UTF8文件,HTTP GET和POST

    VBS函数集-读写二进制文件、UTF8文件、HTTP GET和POST ...本资源提供了一系列实用的函数和知识点,帮助开发者更好地理解和应用VBS语言和ADODB.Stream对象,实现文件读写、HTTP请求和响应处理、Base64编码和解码等功能。

    DWR调用及传参总结

    - **性能**:虽然DWR提供了便利的远程调用,但频繁的AJAX请求可能影响性能,应适当优化请求频率和数据量。 - **调试**:DWR提供了一套内置的调试工具,可以帮助开发者在浏览器中查看和调试DWR调用。 总结,DWR提供...

    使用QT实现文件上传和下载----ftp服务器

    在本文中,我们将深入探讨如何使用QT库来实现文件的上传和下载功能,特别是与FTP服务器的交互。QT是一个跨平台的应用程序开发框架,广泛应用于C++编程,它提供了丰富的功能,包括网络通信,使得我们可以方便地构建...

    JS AJAX前台如何给后台类的函数传递参数

    在AJAX的成功回调函数中,data参数是一个对象,如果后台服务返回了JSON对象,需要通过data.d来获取实际的数据内容,其中的"d"属性是jQuery用来封装实际响应数据的一个默认字段。 此外,需要注意的是,如果客户端...

    php中curl.exe运行文件

    它允许程序员通过命令行工具或PHP扩展来发送网络请求,获取远程服务器的数据,这对于数据抓取、API交互以及自动化测试等任务非常有用。本文将详细介绍`curl`在PHP中的应用,以及如何使用提供的`curl.exe`在CMD命令行...

    buildRequest

    基于lumen框架的guzzlehttp/guzzle组件封装的远程请求的组件 ##useAge ...@param mixed ...$option 不限个数的参数,用与其他参数传参 @return array @throws \GuzzleHttp\Exception\GuzzleException

    前端大厂最新面试题-yitu.docx

    它们的区别在于传参方式:`call`接收一个参数列表,每个参数单独传递;`apply`接收一个数组或类数组对象,数组中的元素作为参数传递。例如,`fn.call(thisContext, arg1, arg2)`与`fn.apply(thisContext, [arg1, arg...

    微信小程序课程表小程序源码.zip

    比如,可以使用API获取用户授权,存储课程数据到本地,或者实现网络请求获取远程课程表数据。 6. 页面路由管理:在微信小程序中,页面间的跳转和传参是通过路由系统实现的。开发者需要掌握如何定义页面路径,以及...

    Silverlight初学者的入门课程

    与第十六章类似,这一节进一步讲解了如何精确控制页面跳转,包括传参和状态管理等高级特性。 #### 第十八章:在Silverlight布局控件 Silverlight提供了多种布局控件,如Canvas、StackPanel和Grid,用于组织和定位...

    入门第一个小程序:简单的电影推荐小程序.zip

    【标题】中的“入门第一个小程序:简单的电影推荐小程序”表明这是一个针对初学者设计的微信小程序项目,主要功能是提供电影推荐服务。这个小程序可能是通过微信开发者工具开发的,旨在帮助学习者了解小程序的基本...

    Electron 如何调用本地模块的方法

    需要注意的是,直接在渲染进程中使用Node.js的API(如require)通常是不安全的,因为它可能会导致安全漏洞,例如远程执行任意代码。因此,Electron提供了安全机制来限制渲染进程访问本地文件系统的权限。 总结来说...

Global site tag (gtag.js) - Google Analytics