- 浏览: 63512 次
- 性别:
- 来自: 四川
最新评论
通常情况下,http请求都是从浏览器端发起的,如提交一个表单,或点击一个链接,都会对服务器发送一个http请求。
但如果我们想在服务器发出一个http请求,如何才能做到呢,如果只是简单的http访问,java.net.URL就足够了,如:
URL url = new URL("http://www.baidu.com");
InputStream ins = url.openStream();
//通过这个InputStream对象就可拿到返回的HTML代码
但如果我们要从服务器对远程URL发出http post访问,并且要传递一些参数,甚至还要设置某些Cookie值,那就要
借助HttpURLConnection这个类了,我们可以用URL.openConnection()方法来得到这个类的对象,具体请看下例:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpURLConnection httpConn = null;
try {
StringBuffer paramData = getQueryString(request);
String urlString = "http://localhost:8080/myweb/login.do";
URL url = new URL(urlString);
httpConn = (HttpURLConnection) url.openConnection();
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
String cookieString = getCookieString(request);
if (cookieString.length() > 0) // 往远程URL传递Cookie值
httpConn.setRequestProperty("Cookie", cookieString);
OutputStream os = httpConn.getOutputStream();
os.write(paramData.toString().getBytes()); // 往远程URL传递参数
os.flush();
os.close();
int code = httpConn.getResponseCode();
if (code == 200) { // 返回成功
BufferedReader reader = new BufferedReader(
new InputStreamReader(httpConn.getInputStream(), "utf-8"));
String line;
StringBuffer buffer = new StringBuffer();
while((line = reader.readLine()) != null) {
buffer.append(line).append("/n");
}
} else { // 访问失败
//forward error page
throw new Exception("Error occur when try to visit the url:" +
url.getPath() + " using HttpURLConnection");
}
} catch (Exception ex) {
throw new Exception("Error occur execute " +
"HttpRemoteProxy.performImpl(), the caused by " + ex);
} finally {
if (httpConn != null)
httpConn.disconnect();
}
}
/*
* 得到request所有的请求参数,并连接起来
*/
private StringBuffer getQueryString(HttpServletRequest request)
throws Exception {
Enumeration paramNames = request.getParameterNames();
StringBuffer paramData = new StringBuffer();
while (paramNames.hasMoreElements()) {
String name = (String)paramNames.nextElement();
String value = request.getParameter(name);
value = URLDecoder.decode(value, "utf-8");
paramData.append(name).append("=").append(value).append("&");
}
if (paramData.length() > 0) //delete the last char '&'
paramData.deleteCharAt(paramData.length() - 1);
return paramData;
}
/*
* 得到所有的cookie,并把它们连接起来
*/
private String getCookieString(HttpServletRequest request) throws Exception {
Cookie[] cookies = request.getCookies();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
String value = cookie.getValue();
String name = cookie.getName();
if (value != null && !value.equals(""))
buffer.append(name).append("=").append(value).append(";");
}
if (buffer.length() > 0)
buffer.deleteCharAt(buffer.length() - 1);//delete the last char ';'
return buffer.toString();
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Linyufa/archive/2009/07/23/4373929.aspx
发表评论
-
struts2 中获取 web资源的方式
2016-01-08 17:02 534在struts2中获取 web资源的方式大致可分为获取扩展 ... -
sql server、db2、oracle 存储过程动态sql语句示例
2015-01-31 19:00 1842Oracle CREATE OR REPLACE PRO ... -
ie9 中出现不明的异常(参数是必选项 (Argument not optional)、尚未实现)等
2015-01-27 23:57 1311<script type="text/jav ... -
SAXParseException: The content of element type "configuration" must match
2014-09-15 23:57 1967在mybatis的配置文件中新增加<databaseI ... -
java.lang.ClassNotFoundException: Cannot find class: DB_VENDOR
2014-09-15 23:45 2007在mybatis 中使用databaseIdProvide ... -
spring mvc3 + fastjson 转换 REST 参数以及输出
2014-03-27 00:16 4253spring 3可以支持Rest风格参数,其内置了jack ... -
eclipse中编辑log4j 的xml配置文件时,自动提示
2014-03-27 00:05 894方法1. 配置log4j.dtd文件: Windows - ... -
java json 转换之 Jackson 框架
2013-08-01 21:50 1170转自:http://www.cnblogs.com/hooj ... -
eclipse/myeclise 自定义注释中的变量名称
2013-07-01 23:18 974eclipse/myeclipse中自带了 ... -
Eclipse Class Decompiler——Java反编译插件
2012-11-08 22:41 1241Eclipse Class Decompiler,整 ... -
struts+spring+hibernate整合问题解决方法 陆续更新中....
2009-01-01 10:33 882在整合ssh过程中出现的问题和解决方法: 一、 严重: Ser ... -
DWR通过Annotation与spring整合
2009-01-21 22:05 668DWR 2.0 增加了一个很有趣的新特性,Annotat ... -
div嵌套页面 div加载页面 (其中获取目标页面的内容是用dwr框架连接java程序做的)
2009-03-15 16:58 659前段时间因为有需要,要在div中加载一个页面。但是以前没做过, ... -
tapestry autocomplete 更改样式及定位
2009-07-09 19:02 722版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文 ... -
Java中的main()方法详解
2009-07-12 16:23 653源文作者:leizhimin 源文链接:http:/ ... -
tapestry5 集成 spring 的事务管理
2009-07-22 15:43 601说明:使用的是tapestry5.1.0.5 和spring ... -
tapestry5 布局 参数的处理
2009-07-23 17:24 434<?xml version="1.0" ... -
tapestry不支持 等html特殊符号的解决方法
2009-07-23 17:34 547在使用tapestry时,偶然发现使用 &a ... -
WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
2009-07-28 15:01 431转自:http://space.itpub.net ... -
WebService大讲堂之Axis2(2):复合类型数据的传递
2009-07-28 15:25 521转自:http://space.itpub.net/12921 ...
相关推荐
在Android应用开发中,客户端与服务器端的通信是不可或缺的一部分,它使得移动设备能够获取、发送数据,实现功能如登录注册、数据同步、文件上传下载等。本Demo着重展示了这一核心概念,通过实例来帮助开发者理解和...
首先,Android客户端通常使用HTTP库,如OkHttp或HttpURLConnection,来发起HTTP请求。在这个例子中,客户端可能创建一个POST请求,将用户名和密码作为参数发送到服务器。请求的数据通常会被编码为JSON格式,因为JSON...
- POST请求则会在请求体中携带数据。服务器需要解析请求体,获取数据,然后执行相应的操作,比如存储数据到数据库。 2. **Android客户端实现**: - Android客户端通过使用HttpURLConnection或第三方库如OkHttp来...
在这个例子中,Servlet被用作服务器端的组件,接收来自Android客户端的HTTP请求,并返回相应的数据。 Servlet的工作原理是:当一个HTTP请求到达服务器时,服务器会创建一个Servlet实例来处理该请求。Servlet通过...
4. **服务器端Servlet**:服务器端通常会有一个Servlet接收并处理这些POST请求。这个Servlet会检查接收到的用户名和密码,然后返回相应的验证结果。这部分代码不在安卓应用内,但需要注意的是,为了安全起见,服务器...
在Android开发中,与Web服务交互是...总的来说,这个例子涵盖了Android应用与WebService交互的基本流程,包括客户端发起POST请求和服务器端接收处理请求。理解这些概念和技术对于任何Android开发者来说都是至关重要的。
这个小例子将探讨如何在Android客户端使用HTTP协议与服务器进行通讯,我们将主要关注两个方面:使用HTTPClient进行网络请求以及处理响应。 首先,Android客户端与服务器通讯通常基于HTTP或HTTPS协议,这是因为它们...
在Android开发中,客户端与服务器端的交互是应用程序的核心部分,尤其当涉及到数据交换和远程服务调用时。本示例主要关注Android客户端如何与Servlet服务端进行有效的通信,涉及了多种数据传输方式,如传递参数、...
在Android开发中,数据交互是不可或缺的一部分,尤其是在网络通信中,`Servlet` 是Java服务器端编程的一个重要组件,常用于处理客户端(如Android应用)发送的HTTP请求。本示例源码提供了Android与Servlet进行数据...
- 使用Android的`HttpURLConnection`或第三方库如`Volley`、`OkHttp`来发起HTTP请求,与服务器进行通信。 - `AsyncTask`或`Retrofit`可以用来处理网络操作,避免阻塞主线程,提供更好的用户体验。 2. **JSON数据...
在Android应用开发中,我们可以使用HttpURLConnection或第三方库如Volley、Retrofit等来发起HTTP请求。VB.NET,尽管通常用于Windows桌面应用,但也有能力创建Android应用,这通常通过 Mono for Android 或 Xamarin ...
在Android中,应用可以使用HTTP客户端库(如HttpURLConnection或OkHttp)来发起网络请求,这里的请求格式和头部信息符合Android应用的行为。 【数据加密与签名】 在请求体中,有三个关键字段:Data、sign和APPSIGN...
当客户端(如浏览器)想要从服务器获取资源时,它会发送一个HTTP请求,而在服务器端接收到这个请求后,会返回一个HTTP响应。在HTTPS中,这些消息都会被加密,以防止中间人攻击和其他形式的安全威胁。 `HttpsMessage...
在Java中,我们可以使用HTTP客户端库,如Apache HttpClient或Spring的RestTemplate,来向其他服务器发起POST或GET请求,携带我们需要传递的参数。在JSP中,我们可以通过Java Servlet API来创建HttpURLConnection对象...
3. **Android客户端**:在Android应用中,使用`HttpURLConnection`或`OkHttp`库发起HTTP请求。创建一个函数,如`sendProductData()`,用于发送POST请求,包含产品数据(转换为JSON格式)。同时,创建另一个函数,如`...
在Android开发中,Web服务是将移动应用与服务器端数据进行交互的重要手段。Web服务允许Android设备通过HTTP协议发送请求并接收响应,实现数据的获取、更新或删除。本资源包含了一个具体的Android Web服务示例的源...
在移动应用开发中,常常需要实现客户端(如Android应用)与服务器端(如Tomcat服务器)的数据交互,以便完成注册、登录、数据存储等核心功能。本文将深入探讨如何实现Android应用通过HTTP协议与运行在Tomcat服务器上...
- **方法覆盖**:通常我们需要重写`doGet`和`doPost`方法,因为它们分别对应HTTP的GET和POST请求。在这个例子中,`doGet`被重定向到`doPost`,意味着无论哪种请求方式,都会执行`doPost`里的代码。 - **处理请求**...
在Android应用中,我们可以使用HttpURLConnection或者第三方库如Volley、OkHttp等来发起HTTP请求。Servlet则在服务器端接收这些请求,处理业务逻辑,如数据库操作,然后返回响应数据。这个入门代码可能包括了Android...
总结,Android应用通过Java的`HttpURLConnection`可以方便地发起POST请求,将数据传送到服务器;而服务器端的PHP可以通过`php://input`获取这些数据,并进行相应的处理和响应。这种方式在Android与服务器之间的数据...