- 浏览: 322427 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
lst923:
...
java 实现图片裁剪 -
kakarottoz:
多谢博主分享,正好用到!
java 实现图片裁剪 -
Vcb:
http://osgi.jxtech.net 是一个完全基于O ...
OSGi介绍 -
Vcb:
是一个完全基于OSGi的开发平台,有在线演示,免费插件可供下 ...
OSGi介绍 -
mikey_5:
谢谢分享,原来设置: style="word-bre ...
td内容自动换行
转自http://www.ibm.com/developerworks/cn/java/j-lo-httpclient-j2ee/
图片见原文
J2EE 站点认证简介
出于安全性的需要和用户授权管理的考虑,常见的 J2EE 站点对特定资源都会加入认证/授权机制。例如一个公网上的论坛,一个只对特定用户开放的 RSS 或 Atom Feed,这些资源都必须在确信访问者为被授权用户时才能向访问者开放。为了实现这样的功能,J2EE 站点通常会采用某种站点认证机制,其中常见的有 HTTP Basic 认证和 J2EE Form-Based 认证。
HTTP Basic 认证
HTTP Basic 认证是 HTTP 认证协议(rfc2617)所定义的标准认证方式。要求 HTTP Basic 认证的服务器会在客户端访问受保护资源时向客户端发出请求,要求客户端上传用户名和密码对。服务器在收到用户名/密码并验证通过后,才将保护资源的内容返回给客户端。它的工作机制如下图:
图 1. HTTP Basic 认证原理
由于是 HTTP 规范,因而常见的浏览器,如 Internet Explorer,Mozilla Firefox,在 步骤 2 中收到服务器对用户名和密码的请求时会弹出认证对话框,供用户输入用户名/密码。
图 2. Firefox 在收到步骤 2 中请求时弹出的用户名/密码输入框
HTTP Basic 认证方式使用 base64 编码方式传送用户名和密码,而 base64 仅仅是一种公开的编码格式而非加密措施,因而如果信道本身不使用 SSL 等安全协议,用户密码较容易被截获。
J2EE Form-Based 认证
Form-Based 认证不同于 HTTP Basic 认证,它是 J2EE 对于认证方式的一种扩展。它使用自定义的 HTML 表单(通常为 login.jsp)作为输入用户名和密码的用户界面,最终将用户在表单上填入的用户名/密码提交至服务器。它的工作机制如下:
图 3. Form-Based 认证原理
Form-Based 认证方式在 J2EE 站点中更为常见。这一方面是由于它提供了自定义的用户名密码输入界面;另一方面它的传输也更为安全,通常情况下 login.jsp 会被配置为需要使用 SSL 信道访问,这样在步骤 2、3 中对用户名和密码的传送就被安全信道所保护,而较难被非法截取。
回页首
Apache HttpClient 认证功能简介
Apache HttpClient 是 Apache 开源组织提供的纯 Java 实现的 HTTP 开源包。它能模拟各类 HTTP 客户端所需功能,例如 HTTP/HTTPS 连接,GET/PUT 请求,甚至提供了超时重试的功能。
HttpClient 也提供了对标准 HTTP 认证的接口,在最新的 HttpClient 3.1 中,支持的认证方式有:
Basic 认证:即前面提到的 rfc2716 规范中定义的 HTTP Basic 认证方式。
Digest 认证:一种基于摘要的更为安全的认证协议,虽然它的应用没有 Basic 认证方式广泛。
NTLM 认证:微软制定的认证协议规范,然而此项标准的细节却并不公开。
我们可以注意到 Form-Based 认证并不在其中,这是因为 Form-Based 认证方式并非 HTTP 协议标准,而是 J2EE 提供的一种特殊的认证方式,因而开发者需要在 HttpClient 基础上另行开发适合 Form-Based 认证的方案。
回页首
使用 Apache HttpClient 通过 HTTP Basic 认证
由于 HttpClient 内置支持 HTTP Basic 认证方式,因而使用 HttpClient 通过 HTTP Basic 认证的步骤显得较为简单。
为 HttpClient 的状态对象添加用户名/密码对。可以注意到在 setCredentials 方法中的另一个参数为 AuthScope 对象。事实上我们添加的每个用户名/密码对都与一个 AuthScope 对象相关联。AuthScope 对象确定了此用户名/密码对的适用站点,在示例中所给出的用户名/密码对将只适用于 www.sample.com 位于 80 端口上的资源。HttpClient 在与其他站点交互时将不会使用此用户名/密码对,这样有效地防止了机密数据被传送至不必要的站点。
开启 HttpClient 提供的占先式(Preemptive)认证功能。开启了这个功能后,HttpClient 对于那些处在之前请求过的URI空间范围内的资源,会主动地随请求一起向服务器发送 Basic 认证数据,而不是等待服务器返回是否需要认证的响应后再提交认证。在多数情况下,能够减少请求-响应传递的次数,从而间接提高了服务器的响应能力。值得注意的是在这种情况下必须在 AuthScope 对象中明确指定适用站点,以避免向不相关的站点泄漏敏感数据。
创建 GetMethod 对象,此对象将使用 GET 方式对保护资源发出 HTTP 请求。
setDoAuthentication(true) 语句将告知 HttpClient 在服务器端发回需要认证的请求后,自动将我们在步骤 1 中设置的用户名/密码对发送至服务器,以完成认证过程。
执行 GET 请求,获取和处理受保护资源的内容。
清单 1. Basic 认证示例
HttpClient client = new HttpClient();
// 1
client.getState().setCredentials(
new AuthScope("www.sample.com", 80, AuthScope.ANY_REALM),
new UsernamePasswordCredentials("username", "password")
);
// 2
client.getParams().setAuthenticationPreemptive(true);
// 3
GetMethod get = new GetMethod("http://www.sample.com/protected.html");
// 4
get.setDoAuthentication( true );
try {
// 5
int status = client.executeMethod( get );
// process the content from the response
…
} finally {
get.releaseConnection();
}
由于 Basic 认证方式直接向服务器发送未经加密的用户名/密码对,导致这些敏感数据很容易在网络传输过程中被截取,因此安全性很低。所幸 HttpClient 对基于安全套接字层(SSL)的 HTTP 协议(HTTPS)提供了足够的支持,而且使用起来也很简单。不过之前需确保本地机器已经安装好 JSSE(Sun 提供的 JDK 1.4 及之后的版本已集成 JSSE)。
使用 HttpClient 进行标准的 SSL 连接对用户来说是透明的。参照清单 1,用户只需用符合 HTTPS 协议的 URL 作为参数生成 GetMethod 对象即可。除此之外,HttpClient 还允许用户定制 SSL 使得客户端程序能够自动接受不同类型的证书。
利用 HttpClient 实现一个自定义的 SSL 协议包括以下 3 个关键步骤:
定制一个实现了 org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory 接口的工厂类。这个工厂类的作用是开启一个与服务器通讯的 Socket 并进行必需的初始化动作。关于实现该接口的具体细节,HttpClient 项目的主页上有详细的代码实例和注释说明。
利用之前创建的工厂类对象、HTTPS 协议名称和默认端口号实例化一个新的 org.apache.commons.httpclient.protocol.Protocol 对象。
注册这个自定义的 Protocol 对象使其与某个协议名绑定,当 HttpClient 处理此类协议时,将默认调用这个自定义 Protocol 对象。
清单 2. 在 HttpClient 中自定义 SSL 示例
// 1
SecureProtocolSocketFactory sampleSSLSocketFactory = new SampleSSLSocketFactory();
// 2
Protocol httpsProtocol = new Protocol("https", sampleSSLSocketFactory, 443);
// 3
Protocol.registerProtocol("https", httpsProtocol);
HttpClient client = new HttpClient();
client.getState().setCredentials(
new AuthScope("www.sample.com", 80, AuthScope.ANY_REALM),
new UsernamePasswordCredentials("username", "password")
);
// Request the protected resource via SSL
GetMethod get = new GetMethod("https://www.sample.com/protected.html");
get.setDoAuthentication( true );
try {
int status = client.executeMethod( get );
// process the content from the response
…
} finally {
get.releaseConnection();
}
回页首
使用 Apache HttpClient 通过 Form-Based 认证
Form-Based 认证相对 HTTP Basic 认证而言过程较为复杂,需要开发者记录下相关的 cookie 信息和部分 header 字段并多次向站点发出请求。它的大致原理如下:
注意:不同的应用可能有不同的配置方式,开发者可以先在浏览器中手动访问受保护资源,获取 login.jsp。进行分析后即可获知对应的认证服务资源 j_security_check 的位置以及对应的用户名与密码在表单中的字段。
假定我们需要访问的受保护资源为 http://www.sample.com/sampleApp/sample.rss。首先我们需要向此保护资源发出请求。而由 Form-Based 认证原理一节中可知,J2EE 服务器会将此请求重定向至 login.jsp。如果仔细分析 login.jsp 我们能发现它仅仅是一个 HTML 表单,其中有两个字段 j_username 和 j_password 分别记录用户名和密码,而提交的目标则是 j_security_check。通常情况下,J2EE 构架会在每个站点应用的根节点定义一个 j_security_check 的资源。而我们的站点的应用程序根(Application Root)为 sampleApp。因而,通过将用户名,密码以及相关 cookie 和 header 字段以 POST 方式发送至 http://www.sample.com/sampleApp/j_security_check 即可通过站点认证。在通过站点认证后,服务器端将给出一个新的重定向,通常它将指向了用户最初试图访问的受保护资源(本例中也就是 http://www.sample.com/sampleApp/sample.rss)。我们只需要再次创建访问对象向此资源发出请求即可获得其内容。
以下给出一个示例:
清单 3. Form-Based 认证示例
HttpClient client = new HttpClient();
client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);
// 1
GetMethod authget = new GetMethod("httpwww.sample.comsampleAppsample.rss");
try {
client.executeMethod(authget);
}
catch (HttpException httpe) {
httpe.printStackTrace();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
// 2
NameValuePair[] data = new NameValuePair[2];
data[0] = new NameValuePair("j_username", username);
data[1] = new NameValuePair("j_password", password);
PostMethod authpost = new PostMethod("http://www.sample.com/sampleApp/j_security_check");
authpost.setRequestBody(data);
// 3
Header hCookie = authget.getRequestHeader("Cookie");
Header hHost = authget.getRequestHeader("Host");
Header hUserAgent = authget.getRequestHeader("User-Agent");
if (hCookie == null || hHost == null || hUserAgent == null) {
return null;
}
authpost.setRequestHeader(hCookie);
authpost.setRequestHeader(hHost);
authpost.setRequestHeader(hUserAgent);
authget.releaseConnection();
try {
client.executeMethod(authpost);
// 4
Header header = authpost.getResponseHeader("location");
if (header != null) {
String newuri = header.getValue();
GetMethod redirect = new GetMethod(newuri);
client.executeMethod(redirect);
// process the content from the response
redirect.releaseConnection();
}
} catch (HttpException httpe) {
httpe.printStackTrace();
return null;
} catch (IOException ioe) {
ioe.printStackTrace();
return null;
}
authpost.releaseConnection();
其中各个步骤解释如下:
使用 GET 方式请求 sample.rss。服务器收到连接后将在响应中给出连接信息,HttpClient 在接收到响应后会将其保存至 cookie 中。
准备第二次对 j_security_check 的连接,将用户名和密码填入新的 POST 请求的正文。
将 cookie 和部分 header 字段拷贝至新请求的报头中,并发送请求。
从认证成功的响应中获取重定向,并对重定向指向的资源发出请求,获取并处理内容。
图片见原文
J2EE 站点认证简介
出于安全性的需要和用户授权管理的考虑,常见的 J2EE 站点对特定资源都会加入认证/授权机制。例如一个公网上的论坛,一个只对特定用户开放的 RSS 或 Atom Feed,这些资源都必须在确信访问者为被授权用户时才能向访问者开放。为了实现这样的功能,J2EE 站点通常会采用某种站点认证机制,其中常见的有 HTTP Basic 认证和 J2EE Form-Based 认证。
HTTP Basic 认证
HTTP Basic 认证是 HTTP 认证协议(rfc2617)所定义的标准认证方式。要求 HTTP Basic 认证的服务器会在客户端访问受保护资源时向客户端发出请求,要求客户端上传用户名和密码对。服务器在收到用户名/密码并验证通过后,才将保护资源的内容返回给客户端。它的工作机制如下图:
图 1. HTTP Basic 认证原理
由于是 HTTP 规范,因而常见的浏览器,如 Internet Explorer,Mozilla Firefox,在 步骤 2 中收到服务器对用户名和密码的请求时会弹出认证对话框,供用户输入用户名/密码。
图 2. Firefox 在收到步骤 2 中请求时弹出的用户名/密码输入框
HTTP Basic 认证方式使用 base64 编码方式传送用户名和密码,而 base64 仅仅是一种公开的编码格式而非加密措施,因而如果信道本身不使用 SSL 等安全协议,用户密码较容易被截获。
J2EE Form-Based 认证
Form-Based 认证不同于 HTTP Basic 认证,它是 J2EE 对于认证方式的一种扩展。它使用自定义的 HTML 表单(通常为 login.jsp)作为输入用户名和密码的用户界面,最终将用户在表单上填入的用户名/密码提交至服务器。它的工作机制如下:
图 3. Form-Based 认证原理
Form-Based 认证方式在 J2EE 站点中更为常见。这一方面是由于它提供了自定义的用户名密码输入界面;另一方面它的传输也更为安全,通常情况下 login.jsp 会被配置为需要使用 SSL 信道访问,这样在步骤 2、3 中对用户名和密码的传送就被安全信道所保护,而较难被非法截取。
回页首
Apache HttpClient 认证功能简介
Apache HttpClient 是 Apache 开源组织提供的纯 Java 实现的 HTTP 开源包。它能模拟各类 HTTP 客户端所需功能,例如 HTTP/HTTPS 连接,GET/PUT 请求,甚至提供了超时重试的功能。
HttpClient 也提供了对标准 HTTP 认证的接口,在最新的 HttpClient 3.1 中,支持的认证方式有:
Basic 认证:即前面提到的 rfc2716 规范中定义的 HTTP Basic 认证方式。
Digest 认证:一种基于摘要的更为安全的认证协议,虽然它的应用没有 Basic 认证方式广泛。
NTLM 认证:微软制定的认证协议规范,然而此项标准的细节却并不公开。
我们可以注意到 Form-Based 认证并不在其中,这是因为 Form-Based 认证方式并非 HTTP 协议标准,而是 J2EE 提供的一种特殊的认证方式,因而开发者需要在 HttpClient 基础上另行开发适合 Form-Based 认证的方案。
回页首
使用 Apache HttpClient 通过 HTTP Basic 认证
由于 HttpClient 内置支持 HTTP Basic 认证方式,因而使用 HttpClient 通过 HTTP Basic 认证的步骤显得较为简单。
为 HttpClient 的状态对象添加用户名/密码对。可以注意到在 setCredentials 方法中的另一个参数为 AuthScope 对象。事实上我们添加的每个用户名/密码对都与一个 AuthScope 对象相关联。AuthScope 对象确定了此用户名/密码对的适用站点,在示例中所给出的用户名/密码对将只适用于 www.sample.com 位于 80 端口上的资源。HttpClient 在与其他站点交互时将不会使用此用户名/密码对,这样有效地防止了机密数据被传送至不必要的站点。
开启 HttpClient 提供的占先式(Preemptive)认证功能。开启了这个功能后,HttpClient 对于那些处在之前请求过的URI空间范围内的资源,会主动地随请求一起向服务器发送 Basic 认证数据,而不是等待服务器返回是否需要认证的响应后再提交认证。在多数情况下,能够减少请求-响应传递的次数,从而间接提高了服务器的响应能力。值得注意的是在这种情况下必须在 AuthScope 对象中明确指定适用站点,以避免向不相关的站点泄漏敏感数据。
创建 GetMethod 对象,此对象将使用 GET 方式对保护资源发出 HTTP 请求。
setDoAuthentication(true) 语句将告知 HttpClient 在服务器端发回需要认证的请求后,自动将我们在步骤 1 中设置的用户名/密码对发送至服务器,以完成认证过程。
执行 GET 请求,获取和处理受保护资源的内容。
清单 1. Basic 认证示例
HttpClient client = new HttpClient();
// 1
client.getState().setCredentials(
new AuthScope("www.sample.com", 80, AuthScope.ANY_REALM),
new UsernamePasswordCredentials("username", "password")
);
// 2
client.getParams().setAuthenticationPreemptive(true);
// 3
GetMethod get = new GetMethod("http://www.sample.com/protected.html");
// 4
get.setDoAuthentication( true );
try {
// 5
int status = client.executeMethod( get );
// process the content from the response
…
} finally {
get.releaseConnection();
}
由于 Basic 认证方式直接向服务器发送未经加密的用户名/密码对,导致这些敏感数据很容易在网络传输过程中被截取,因此安全性很低。所幸 HttpClient 对基于安全套接字层(SSL)的 HTTP 协议(HTTPS)提供了足够的支持,而且使用起来也很简单。不过之前需确保本地机器已经安装好 JSSE(Sun 提供的 JDK 1.4 及之后的版本已集成 JSSE)。
使用 HttpClient 进行标准的 SSL 连接对用户来说是透明的。参照清单 1,用户只需用符合 HTTPS 协议的 URL 作为参数生成 GetMethod 对象即可。除此之外,HttpClient 还允许用户定制 SSL 使得客户端程序能够自动接受不同类型的证书。
利用 HttpClient 实现一个自定义的 SSL 协议包括以下 3 个关键步骤:
定制一个实现了 org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory 接口的工厂类。这个工厂类的作用是开启一个与服务器通讯的 Socket 并进行必需的初始化动作。关于实现该接口的具体细节,HttpClient 项目的主页上有详细的代码实例和注释说明。
利用之前创建的工厂类对象、HTTPS 协议名称和默认端口号实例化一个新的 org.apache.commons.httpclient.protocol.Protocol 对象。
注册这个自定义的 Protocol 对象使其与某个协议名绑定,当 HttpClient 处理此类协议时,将默认调用这个自定义 Protocol 对象。
清单 2. 在 HttpClient 中自定义 SSL 示例
// 1
SecureProtocolSocketFactory sampleSSLSocketFactory = new SampleSSLSocketFactory();
// 2
Protocol httpsProtocol = new Protocol("https", sampleSSLSocketFactory, 443);
// 3
Protocol.registerProtocol("https", httpsProtocol);
HttpClient client = new HttpClient();
client.getState().setCredentials(
new AuthScope("www.sample.com", 80, AuthScope.ANY_REALM),
new UsernamePasswordCredentials("username", "password")
);
// Request the protected resource via SSL
GetMethod get = new GetMethod("https://www.sample.com/protected.html");
get.setDoAuthentication( true );
try {
int status = client.executeMethod( get );
// process the content from the response
…
} finally {
get.releaseConnection();
}
回页首
使用 Apache HttpClient 通过 Form-Based 认证
Form-Based 认证相对 HTTP Basic 认证而言过程较为复杂,需要开发者记录下相关的 cookie 信息和部分 header 字段并多次向站点发出请求。它的大致原理如下:
注意:不同的应用可能有不同的配置方式,开发者可以先在浏览器中手动访问受保护资源,获取 login.jsp。进行分析后即可获知对应的认证服务资源 j_security_check 的位置以及对应的用户名与密码在表单中的字段。
假定我们需要访问的受保护资源为 http://www.sample.com/sampleApp/sample.rss。首先我们需要向此保护资源发出请求。而由 Form-Based 认证原理一节中可知,J2EE 服务器会将此请求重定向至 login.jsp。如果仔细分析 login.jsp 我们能发现它仅仅是一个 HTML 表单,其中有两个字段 j_username 和 j_password 分别记录用户名和密码,而提交的目标则是 j_security_check。通常情况下,J2EE 构架会在每个站点应用的根节点定义一个 j_security_check 的资源。而我们的站点的应用程序根(Application Root)为 sampleApp。因而,通过将用户名,密码以及相关 cookie 和 header 字段以 POST 方式发送至 http://www.sample.com/sampleApp/j_security_check 即可通过站点认证。在通过站点认证后,服务器端将给出一个新的重定向,通常它将指向了用户最初试图访问的受保护资源(本例中也就是 http://www.sample.com/sampleApp/sample.rss)。我们只需要再次创建访问对象向此资源发出请求即可获得其内容。
以下给出一个示例:
清单 3. Form-Based 认证示例
HttpClient client = new HttpClient();
client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);
// 1
GetMethod authget = new GetMethod("httpwww.sample.comsampleAppsample.rss");
try {
client.executeMethod(authget);
}
catch (HttpException httpe) {
httpe.printStackTrace();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
// 2
NameValuePair[] data = new NameValuePair[2];
data[0] = new NameValuePair("j_username", username);
data[1] = new NameValuePair("j_password", password);
PostMethod authpost = new PostMethod("http://www.sample.com/sampleApp/j_security_check");
authpost.setRequestBody(data);
// 3
Header hCookie = authget.getRequestHeader("Cookie");
Header hHost = authget.getRequestHeader("Host");
Header hUserAgent = authget.getRequestHeader("User-Agent");
if (hCookie == null || hHost == null || hUserAgent == null) {
return null;
}
authpost.setRequestHeader(hCookie);
authpost.setRequestHeader(hHost);
authpost.setRequestHeader(hUserAgent);
authget.releaseConnection();
try {
client.executeMethod(authpost);
// 4
Header header = authpost.getResponseHeader("location");
if (header != null) {
String newuri = header.getValue();
GetMethod redirect = new GetMethod(newuri);
client.executeMethod(redirect);
// process the content from the response
redirect.releaseConnection();
}
} catch (HttpException httpe) {
httpe.printStackTrace();
return null;
} catch (IOException ioe) {
ioe.printStackTrace();
return null;
}
authpost.releaseConnection();
其中各个步骤解释如下:
使用 GET 方式请求 sample.rss。服务器收到连接后将在响应中给出连接信息,HttpClient 在接收到响应后会将其保存至 cookie 中。
准备第二次对 j_security_check 的连接,将用户名和密码填入新的 POST 请求的正文。
将 cookie 和部分 header 字段拷贝至新请求的报头中,并发送请求。
从认证成功的响应中获取重定向,并对重定向指向的资源发出请求,获取并处理内容。
发表评论
-
hibernate集合映射inverse和cascade详解
2013-05-04 12:14 949网上转载,出处不详 1、到底在哪用cascade=" ... -
java.lang.UnsupportedClassVersionError
2013-04-03 15:33 1127java.lang.UnsupportedClassVersi ... -
Hibernate实体注解
2013-04-03 15:29 1112转自:http://blog.csdn.net/sleepin ... -
转:Maven实战
2013-03-06 12:54 0转自http://www.iteye.com/topic/11 ... -
Spring定时器在SSH框架中的应用
2013-02-28 14:26 1151转自网络,来源不详.... 并非应用系统中发生的所有事情都是 ... -
ASCII字符集详解
2013-02-19 18:03 4960http://www.crifan.com/files/d ... -
安装eclipse windowbuilder
2013-02-17 10:01 2298windowbuilder,就是原来的SWT Designe ... -
点阵输出字符
2013-02-06 13:38 1230http://www.oschina.net/code/sni ... -
Hibernate主键生成策略
2013-01-28 15:50 8651) assigned 主键由外部程 ... -
结束多层循环
2013-01-23 12:28 1472没有啥意义的东西 public static void m ... -
JDBC Batch 批量插入
2013-01-22 17:02 1101JdbcBatchInsert.java import j ... -
JDBC 操作 oracle blob
2013-01-18 10:56 3976jdbc 插入、读取oracle blob字段 pac ... -
java.lang.UnsupportedClassVersionError: Bad version number in .class file
2013-01-17 13:30 943备忘一下: 导入一个工程后,运行时出现java.lang.Un ... -
List<Map> 自定义排序
2012-12-19 13:05 2504对list根据自定义方法排序记要 List list = ... -
后台拼接js代码字符串,处理特殊转义字符
2012-12-13 17:51 5329因为在JS程序代码中,如果生成的字符串中包含特殊字符,那程序容 ... -
java 实现图片裁剪
2012-10-26 15:04 14921import java.awt.Rectangle; i ... -
jar 的使用
2012-10-13 17:39 911偶儿用下,都是临时去查,现在把相关资料记录在这 执行:jav ... -
自动拆箱的bug
2012-10-09 09:13 988在这看到的代码,第二次调用 fun时,出NULL指针异常,看了 ... -
map的三种遍历方法
2012-09-28 16:06 784http://www.cnblogs.com/christ/a ... -
java日期间隔
2012-09-25 16:51 893/** * Date与Date之间的间隔小时 ...
相关推荐
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
这是我一个抠图程序发送请求时专用的jar,maven仓库不好下载,我就上传到csdn,以便下次可以继续使用
赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...
赠送jar包:httpclient-4.4.1.jar; 赠送原API文档:httpclient-4.4.1-javadoc.jar; 赠送源代码:httpclient-4.4.1-sources.jar; 赠送Maven依赖信息文件:httpclient-4.4.1.pom; 包含翻译后的API文档:httpclient...
赠送jar包:httpclient-4.5.12.jar; 赠送原API文档:httpclient-4.5.12-javadoc.jar; 赠送源代码:httpclient-4.5.12-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.12.pom; 包含翻译后的API文档:...
这里提到的四个jar包——httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5,都是Apache HttpClient库的不同组件,用于支持HTTP通信和相关功能。 **httpcore-4.2.4.jar** 是HTTP Core模块...
赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...
在IT行业中,网络通信是不可或缺的一部分,而上传文件或发送包含多个部分的数据通常涉及使用`multipart/form-data`编码方式。`multipart/form-data`是一种HTTP请求的Content-Type,它允许我们发送一个请求体,其中...
赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...
赠送jar包:httpclient-4.5.2.jar; 赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)-英语-对照...
package org.apache.commons.httpclient; // Imports import java.io.IOException; import org.apache.commons.httpclient.params.HttpClientParams; import org.apache.commons.logging.Log; public class ...
赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...
当我们需要上传文件或同时发送键值对(包括复杂的数据结构如JSON)时,通常会使用`multipart/form-data`和JSON这两种数据格式。下面我们将深入探讨如何在C#中实现这两种数据格式的POST请求。 一、`multipart/form-...
赠送jar包:httpclient-4.5.5.jar; 赠送原API文档:httpclient-4.5.5-javadoc.jar; 赠送源代码:httpclient-4.5.5-sources.jar; 包含翻译后的API文档:httpclient-4.5.5-javadoc-API文档-中文(简体)版.zip ...
httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等10个必须的开发包。 1.commons-codec-1.9.jar 2.commons-logging-1.2.jar 3.fluent-hc-4.5.jar 4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6....
wechatpay-apache-httpclient-0.2.1.jar
httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar
赠送jar包:httpclient-4.5.10.jar; 赠送原API文档:httpclient-4.5.10-javadoc.jar; 赠送源代码:httpclient-4.5.10-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.10.pom; 包含翻译后的API文档:...
标签:amber-oauth2-httpclient4-0.22-incubating.zip,amber,oauth2,httpclient4,0.22,incubating.zip包下载,依赖包