总结几个最近处理问题中使用个几个代码demo

demo1:几个不同的http请求方式总结:

-------------------------------------------------------------------------------------------------

Post新版本的请求方式:

 基于的版本:

        <!--&lt;!&ndash; https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient &ndash;&gt;-->
        <!--<dependency>-->
            <!--<groupId>org.apache.httpcomponents</groupId>-->
            <!--<artifactId>httpclient</artifactId>-->
            <!--<version>4.5.5</version>-->
        <!--</dependency>-->
//                String uploadResponse = Request.Post(nodeAddress + "/" + bucketName + "/" + objectName)
//                        .addHeader("x-nos-token", uploadToken)
//                        .bodyByteArray(chunkData, 0, readLen)
//                        .execute()
//                        .returnContent()
//                        .toString();

-------------------------------------------------------------------------------------------------

Post请求版本方式二:

//    public static String doPost(String url, String token, byte[] chunk, int off, int len)
//    {
//        CloseableHttpClient httpClient = null;
//        CloseableHttpResponse httpResponse = null;
//        String result = "";
//        // 创建httpClient实例
//        httpClient = HttpClients.createDefault();
//        // 创建httpPost远程连接实例
//        HttpPost httpPost = new HttpPost(url);
//        // 配置请求参数实例
//        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
//                .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
//                .setSocketTimeout(60000)// 设置读取数据连接超时时间
//                .build();
//        // 为httpPost实例设置配置
//        httpPost.setConfig(requestConfig);
//        // 设置请求头
//        httpPost.addHeader("x-nos-token", token);
//        // 封装post请求参数
//        // 为httpPost设置封装好的请求参数
//        HttpEntity requestEntity = new ByteArrayEntity(chunk, 0, len);
//        httpPost.setEntity(requestEntity);
//
//        try {
//            // httpClient对象执行post请求,并返回响应参数对象
//            httpResponse = httpClient.execute(httpPost);
//            // 从响应对象中获取响应内容
//            HttpEntity entity = httpResponse.getEntity();
//            result = EntityUtils.toString(entity);
//        } catch (ClientProtocolException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            // 关闭资源
//            if (null != httpResponse) {
//                try {
//                    httpResponse.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (null != httpClient) {
//                try {
//                    httpClient.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return result;
//    }

-------------------------------------------------------------------------------------------------

Post请求版本方式二:

public static String sendPost(String url, String token, byte[] chunk, int off, int len)
{
// 创建httpClient实例对象
HttpClient httpClient = new HttpClient();
// 设置httpClient连接主机服务器超时时间:15000毫秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
// 创建post请求方法实例对象
PostMethod postMethod = new PostMethod(url);
// 设置post请求超时时间
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
postMethod.addRequestHeader("x-nos-token", token);
try {
//json格式的参数解析

RequestEntity entity = new ByteArrayRequestEntity(chunk);
postMethod.setRequestEntity(entity);

httpClient.executeMethod(postMethod);
String result = postMethod.getResponseBodyAsString();
postMethod.releaseConnection();
return result;
} catch (IOException e) {
logger.info("POST请求发出失败!!!");
e.printStackTrace();
}
return null;
}

-------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------

GET请求方式一:

public static String doGet(String httpurl)
{
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
// 返回结果字符串
String result = null;

try {
// 创建远程url连接对象
URL url = new URL(httpurl);
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout(15000);
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout(60000);
// 发送请求
connection.connect();
// 通过connection连接,获取输入流
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
// 封装输入流is,并指定字符集
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
// 存放数据
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (MalformedURLException e) {
logger.error("非法地址格式异常...");
e.printStackTrace();
} catch (IOException e) {
logger.error("Get请求中IO流出现异常");
e.printStackTrace();
} finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}

if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}

connection.disconnect();// 关闭远程连接
}

return result;
}

-------------------------------------------------------------------------------------------------

过程问题记录:

在使用get请求的时候,如果URL中的请求参数包含了特殊字符,需要对特殊字符进行转义:

有些字符在URL中具有特殊含义,基本编码规则如下:
            特殊含义                                               十六进制值 
1.+ 表示空格(在 URL 中不能使用空格)                   %20 
2./ 分隔目录和子目录                                              %2F 
3.? 分隔实际的 URL 和参数                                      %3F 
4.% 指定特殊字符                                                  %25 
5.# 表示书签                                                         %23 
6.& URL 中指定的参数间的分隔符                             %26 

解决方法:

//对鉴权参数做AES加密处理
requestId = java.net.URLEncoder.encode( AESCryptUtils.encode(requestId) );
data = java.net.URLEncoder.encode( AESCryptUtils.encode(data) );
action = java.net.URLEncoder.encode( AESCryptUtils.encode(action) );

String URL = AUTH_URL + "?" + "data=" + data + "&requestId=" + requestId + "&action=" + action;

  

猜你喜欢

转载自www.cnblogs.com/gxyandwmm/p/11985056.html