问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

httpclient get 怎么把respon 转化为流

发布网友 发布时间:2022-05-22 01:29

我来回答

2个回答

热心网友 时间:2023-11-24 06:30

package com.tw.url.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

/**
* <p>
* HTTP公用类
* 所需包:Commons-httpclient.jar,commons-codec-1.3.jar
* 学习参见网址: https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/
* </p>
*
* @author tw 2009-07-16
*
*/
public class HttpClientUtils {

public static void main(String arg[]) throws Exception {
String url = "https://www.99bill.com/webapp/receiveDrawbackAction.do" ;
//getDoGetURL2(url,"utf-8");//测试ok
//getDoGetURL(url,"utf-8");//测试ok
getDoPostResponseDataByURL(url, null , "utf-8" , true ); //测试ok
}

/**
* <p>httpClient的get请求方式</p>
* @param url = "https://www.99bill.com/webapp/receiveDrawbackAction.do";
* @param charset = ="utf-8";
* @return
* @throws Exception
*/
public static String getDoGetURL(String url, String charset) throws Exception {

HttpClient client = new HttpClient();
GetMethod method1 = new GetMethod(url);

if ( null == url || !url.startsWith( "http" )) {
throw new Exception( "请求地址格式不对" );
}

// 设置请求的编码方式
if ( null != charset) {
method1.addRequestHeader( "Content-Type" ,
"application/x-www-form-urlencoded; charset=" + charset);
} else {
method1.addRequestHeader( "Content-Type" ,
"application/x-www-form-urlencoded; charset=" + "utf-8" );
}
int statusCode = client.executeMethod(method1);

if (statusCode != HttpStatus.SC_OK) { // 打印服务器返回的状态
System.out.println( "Method failed: " + method1.getStatusLine());
}
// 返回响应消息
byte[] responseBody = method1.getResponseBodyAsString().getBytes(method1.getResponseCharSet());
// 在返回响应消息使用编码(utf-8或gb2312)
String response = new String(responseBody, "utf-8" );
System.out.println( "------------------response:" +response);
// 释放连接
method1.releaseConnection();
return response;
}

/**
* <p>httpClient的get请求方式2</p>
* @param url = "https://www.99bill.com/webapp/receiveDrawbackAction.do";
* @param charset = ="utf-8";
* @return
* @throws Exception
*/
public static String getDoGetURL2(String url, String charset)
throws Exception {
/*
* 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤:
* 1:生成一个 HttpClinet 对象并设置相应的参数。
* 2:生成一个 GetMethod 对象并设置响应的参数。
* 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get 方法。
* 4:处理响应状态码。
* 5:若响应正常,处理 HTTP 响应内容。
* 6:释放连接。
*/

/* 1 生成 HttpClinet 对象并设置参数 */
HttpClient httpClient = new HttpClient();
// 设置 Http 连接超时为5秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout( 5000 );

/* 2 生成 GetMethod 对象并设置参数 */
GetMethod getMethod = new GetMethod(url);
// 设置 get 请求超时为 5 秒
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000 );
// 设置请求重试处理,用的是默认的重试处理:请求三次
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());

String response = "" ;
/* 3 执行 HTTP GET 请求 */
try {
int statusCode = httpClient.executeMethod(getMethod);
/* 4 判断访问的状态码 */
if (statusCode != HttpStatus.SC_OK) {
System.err.println( "Method failed: " + getMethod.getStatusLine());
}

/* 5 处理 HTTP 响应内容 */
// HTTP响应头部信息,这里简单打印
Header[] headers = getMethod.getResponseHeaders();
for (Header h : headers)
System.out.println(h.getName() + "------------ " + h.getValue());

// 读取 HTTP 响应内容,这里简单打印网页内容
byte [] responseBody = getMethod.getResponseBody(); // 读取为字节数组
response = new String(responseBody, charset);
System.out.println( "----------response:" +response);

// 读取为 InputStream,在网页内容数据量大时候推荐使用
//InputStream response = getMethod.getResponseBodyAsStream();

} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println( "Please check your provided http address!" );
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
e.printStackTrace();
} finally {
/* 6 .释放连接 */
getMethod.releaseConnection();
}
return response;
}

/**
* <p>执行一个HTTP POST请求,返回请求响应的HTML</p>
*
* @param url 请求的URL地址
* @param params 请求的查询参数,可以为null
* @param charset 字符集
* @param pretty 是否美化
* @return 返回请求响应的HTML
*/
public static String getDoPostResponseDataByURL(String url,
Map<String, String> params, String charset, boolean pretty) {

StringBuffer response = new StringBuffer();

HttpClient client = new HttpClient();
HttpMethod method = new PostMethod(url);

//设置Http Post数据
if (params != null ) {
HttpMethodParams p = new HttpMethodParams();
for (Map.Entry<String, String> entry : params.entrySet()) {
p.setParameter(entry.getKey(), entry.getValue());
}
method.setParams(p);
}
try {
client.executeMethod(method);
if (method.getStatusCode() == HttpStatus.SC_OK) {
//读取为 InputStream,在网页内容数据量大时候推荐使用
BufferedReader reader = new BufferedReader(
new InputStreamReader(method.getResponseBodyAsStream(),
charset));
String line;
while ((line = reader.readLine()) != null ) {
if (pretty)
response.append(line).append(System.getProperty( "line.separator" ));
else
response.append(line);
}
reader.close();
}
} catch (IOException e) {
System.out.println( "执行HTTP Post请求" + url + "时,发生异常!" );
e.printStackTrace();
} finally {
method.releaseConnection();
}
System.out.println( "--------------------" +response.toString());
return response.toString();
}

}

热心网友 时间:2023-11-24 06:30

不止到不止到不止到不止到不止到
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
婴幼儿认知功能的主义转变出现在几岁 认知发展理论心理发展过程 如何判断相亲对象是否渣男呢? 游船怎么造句 mei字造句 赏阅怎么造句 张金战个人记事 空调扇怎么关 matlab怎么运行程序文件-matlab运行程序文件的方法教程 ios8.1.1怎么没有搜索栏了 C++小游戏代码 低吟和大喊是不是反义词 上古卷轴5衣服mod载入后怎么在游戏里面获得? 低吟的反义词是什么?严厉的反义词是什么?幼稚的反义词是什么?一定采纳 上古卷轴mod代码怎么获取? 低吟 的近义词是什么? 想问问上古卷轴神魔双子的衣服代码是多少,或者mod物品获取器里面哪个是神魔双子的mod 上古卷轴5重制版有没有能用的直接获取mod物品的mod? 谁能告诉油焖尖椒做法吗? 龙胆豹胎代表哪三个数 晚上慢跑20分钟,能减肥么 ZEMAX里面的WAⅤ文件怎么用? ZEMAX几何位图分析保存 ZEMAX怎么自己画面型 使用Zemax软件如何设计离轴抛物反射镜?主要是离轴的角度该怎么实现? 求助!!!北京博雅环球人力资源有限公司刷单被骗!!事情是这样子的! 石家庄森诺人力资源诈骗大学生,石家庄市诈骗案举报电话永远打不通! 北京泰格人力资源管理公司,是诈骗 人力资源收费算诈骗吗 近期在吉林省长春市是否有人力资源公司诈骗案? 在哪里可以找到中国银行贷款利息计算器功能? 高中毕业师生道别最感人的语录 中国最好最准确的股票吧(股票论坛)是什么? 推荐几只股票吧 推荐个股票吧 价格在20元左右的 盛和资源股票吧同花顺圈子 绿地控股同花顺股票吧 广晟有色同花顺股票吧 景嘉微同花顺股票吧 山水比德股票吧同花顺 杭州专业接发的地方很多,东站,四季青都有,不知道那边有木有无痕接发? 杭州接发哪里好 浙江人接发哪个地区多 专心的反义词有 专心的反义词 专心的反义词是不是分心? 防御、温和、故意、诚心诚意、专心致志的反义词是什么标准答案。 专心的反义词是什么?帮帮急!!! 防御,温和,故意,诚心诚意,专心致志的反义词? 答司马谏议书一词多义