- 浏览: 56988 次
- 性别:
- 来自: 广州
最新评论
在使用httpclient请求用MultipartEntityBuilder配置参数时,远程服务器无法获取参数
- 博客分类:
- java
在使用httpclient请求时,远程服务器无法获取参数。
1、包版本:httpclient-4.5.3.jar,httpcore-4.4.6.jar,httpmime-4.5.3.jar
2、本地同一服务器通过httpclient调用可以获取到传递的参数(**通过**)
3、本地不同服务器通过httpclient调用可以获取到传递的参数(**通过**)
4、远程服务器通过httpclient调用不能获取到传递的参数(**不通过**)
5、已确保参数名一致,因为换一种写法可以获取到参数
代码:
解决方案(不是所有环境都能用):
1、包版本:httpclient-4.5.3.jar,httpcore-4.4.6.jar,httpmime-4.5.3.jar
2、本地同一服务器通过httpclient调用可以获取到传递的参数(**通过**)
3、本地不同服务器通过httpclient调用可以获取到传递的参数(**通过**)
4、远程服务器通过httpclient调用不能获取到传递的参数(**不通过**)
5、已确保参数名一致,因为换一种写法可以获取到参数
代码:
/** * 提交数据,返回JSONObject对象 * * @param url 请求路径 * @param headerParams 请求头消息参数 * @param requestParams 请求业务参数 * * @return */ public static JSONObject httpPostToJson(String url,JSONObject headerParams,JSONObject requestParams) { HttpPost httpPost = null; JSONObject jsonObject = new JSONObject(); try { // 创建HttpClient实例 HttpClient httpClient = HttpClients.createDefault(); // 创建httpPost实例,设置超时和头消息 httpPost = createHttpPost(url,headerParams); //设置httpPost请求参数 setHttpRequestParams(httpPost, requestParams); //执行httpPost请求 jsonObject = executeHttpClient(httpClient, httpPost); } catch (Exception e) { e.printStackTrace(); jsonObject.put("code", ERROR_STATUS_CODE); jsonObject.put("msg", "服务器遇到错误,无法完成请求"); jsonObject.put("data", "{}"); }finally{ if(httpPost != null){ httpPost.abort(); } } /** * 创建httpPost请求,设置超时和头消息 * * @param _url 请求路径 * @param headerParams 头参数集合 * @return */ private static HttpPost createHttpPost(String _url, JSONObject headerParams)throws Exception{ // 创建Post方法实例 HttpPost httpPost = new HttpPost(_url); // 设置连接超时 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(CONNECT_TIME_OUT).setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT) .setSocketTimeout(SOCKET_TIME_OUT).build(); httpPost.setConfig(requestConfig); // 构造消息头 //设置头参数 if(headerParams != null){ for(Object key : headerParams.keySet()){ httpPost.setHeader(key.toString(), headerParams.getString(key.toString())); } } return httpPost; } /** * 设置请求参数 * * @param httpPost * @param jsonObj * @param in */ private static void setHttpRequestParams(HttpPost httpPost,JSONObject jsonObj)throws Exception{ MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builderHttpRequestParams(httpPost, builder, jsonObj); } /** * 设置请求参数 * * @param httpPost * @param jsonObj * @param in */ private static void builderHttpRequestParams(HttpPost httpPost,MultipartEntityBuilder builder,JSONObject jsonObj)throws Exception{ if(jsonObj != null){ for(Object key : jsonObj.keySet()){ builder.addTextBody(key.toString(), jsonObj.getString(key.toString())); } } HttpEntity entity = builder.build(); httpPost.setEntity(entity); }
解决方案(不是所有环境都能用):
public void processUpload(HttpServletRequest request, HttpServletResponse response){ //检测是不是存在上传文件 boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart){ DiskFileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = null; try { // 解析request请求 items = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } if(items!=null){ //解析表单项目 Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); //如果是普通表单属性 if (item.isFormField()) { //相当于input的name属性 <input type="text" name="content"> String name = item.getFieldName(); //input的value属性 String value = item.getString(); System.out.println("属性:" + name + " 属性值:" + value); } //如果是上传文件 else { //属性名 String fieldName = item.getFieldName(); //上传文件路径 String fileName = item.getName(); fileName = fileName.substring(fileName.lastIndexOf("/") + 1);// 获得上传文件的文件名 } } } } }
发表评论
-
Java中getResourceAsStream的用法
2020-12-29 10:02 285Java中的getResourceAsStream有以下几种: ... -
使用struts标签中s:property标签访问静态变量
2016-03-07 14:50 4671、在struts.xml配置文件中增加访问静态变量的配置 ... -
极光推送和MQ通信
2016-02-18 10:53 8171、RemMobileClient包含极光推送和MQ通信 2、 ... -
B/S架构在线更新
2013-12-31 11:39 2530转载:http://www.iteye.com/topic ... -
关于打成jar包后不能读取相关配置的文章
2013-12-13 16:43 1387http://hxraid.iteye.com/blog/48 ... -
使用java2word包中的Document类来创建新文档
2013-02-28 16:47 42691、使用java2word包中的Document类来创建新文档 ... -
随机生成图片验证码
2012-10-02 21:08 2041public class Img extends Htt ... -
中文乱码问题
2012-10-02 09:36 31531、字符编码 在计算机中任何数据都是以二进制存 ... -
myeclipse安装svn插件
2012-09-07 11:14 940方法1:link安装 安装subclipse, MyEclip ... -
找出一个字符串中的数字
2012-08-16 15:56 1257//找到整个字符串中的数字 String fileco ... -
java用jxl包导出Excel的例子
2012-07-27 17:54 1512/** * 导出信息 * @date 201 ... -
java对日期时间的相关操作方法
2012-07-27 08:40 2225/** * */ package com.ke ... -
对两个对象进行排序
2012-06-22 17:08 813//声明存放A对象的集合 List<A> exce ... -
关于用java程序调用本地动态库(*.dll文件)
2012-06-06 17:58 1092我的功能是通过java代码调用c++写的本地动态库向LED显示 ...
相关推荐
在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
在这个场景中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用的新手机号码信息,并将这些数据存储到本地文件中。以下是对这个过程的详细解释: 1. **HttpClient的基本使用**: HttpClient提供了一...
本文将详细介绍如何使用HttpClient来获取OAuth2.0服务器中的token,以及涉及到的相关技术点。 首先,理解OAuth2.0的核心概念: 1. **资源所有者(Resource Owner)**:拥有资源的用户。 2. **资源服务器(Resource...
try(CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(url); StringEntity stringEntity = new StringEntity(params, Charset.forName("UTF-8")); ...
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...
httpclient 请求两种方式,如果有cookie可加上cookies,同步获取返回值
在本实例中,我们将深入探讨如何使用HttpClient来发送请求以及处理返回的数据。 首先,让我们了解HttpClient的基本用法。Apache HttpClient库提供了一个`CloseableHttpClient`接口,它是执行HTTP请求的主要入口点。...
总之,`HttpClient`和`AsyncTask`的结合使用,能够让我们在Android应用中高效、非阻塞地获取服务器数据。尽管现代的网络库提供了更多便利和性能优化,但理解这些基础知识对于解决旧项目或特殊需求仍然是有价值的。
在Java编程中,Apache HttpClient库提供了一个强大的工具,使得我们可以轻松地实现HTTP请求,特别是在需要与Servlet进行交互时。本篇文章将详细探讨如何使用HttpClient来访问Servlet,并阐述相关的核心知识点。 ...
### 使用HttpClient发送POST请求,并获取响应内容 #### 一、简介 在现代软件开发中,尤其是在Web应用领域,客户端与服务器之间的通信是非常重要的环节。Java作为一种广泛应用的编程语言,提供了多种方式来实现这一...
在使用HttpClient发送POST请求时,主要步骤如下: 1. 创建HttpClient实例:这是所有操作的基础,例如`CloseableHttpClient httpClient = HttpClients.createDefault();` 2. 构建HttpPost对象:`...
接着,通过httpClient执行请求并获取响应。注意,执行完请求后需要关闭响应和HttpClient以释放资源。 对于POST请求,你需要创建一个HttpPost对象,并设置请求体: ```java HttpPost httpPost = new HttpPost(...
在这个例子中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用手机号码的数据,并将其存储到本地文件系统。以下是对这个过程的详细解释: 1. **HttpClient的引入与配置**: 首先,我们需要在项目中...
在Java中,同步请求会阻塞调用线程,直到服务器返回响应。然而,异步请求允许程序在等待响应的同时继续执行其他任务,提高了应用程序的响应性和效率。HttpClient通过使用Future和Callback接口支持异步请求处理。 1....
标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...
可以使用`MultipartEntityBuilder`或者`MultiValueMap`来创建多部分实体,其中包含了文件和额外的请求参数(如文件名、类型等)。 4. **添加文件到实体**: 调用`addBinaryBody`或`put`方法将文件内容添加到实体中。...
本教程将聚焦于使用`HttpClient`库进行GET请求,这是获取远程资源最常见的方式。请注意,本教程不涉及POST请求,POST主要用于向服务器提交数据。 ## 1. Android HttpClient介绍 `HttpClient`是Apache HTTP组件的一...
HttpClient是Apache基金会开发的一个...在实际项目中,根据需求选择合适的HttpClient配置,能够有效地提高网络请求的效率和可靠性。同时,对于大型项目,可能还需要考虑线程安全、性能优化以及错误处理等方面的问题。
4. **执行请求**:使用HttpClient实例执行请求,并获取HttpResponse对象: ```java HttpResponse response = httpClient.execute(httpGet); ``` 5. **处理响应**:从HttpResponse对象中读取响应状态码和数据。...