java发送get请求_java发送http get请求的两种方法(总结)

长话短说,废话不说

一、第一种方式,通过HttpClient方式,代码如下:

public static String httpGet(String url, String charset)

throws HttpException, IOException {

String json = null;

HttpGet httpGet = new HttpGet();

// 设置参数

try {

httpGet.setURI(new URI(url));

} catch (URISyntaxException e) {

throw new HttpException("请求url格式错误。"+e.getMessage());

}

// 发送请求

HttpResponse httpResponse = client.execute(httpGet);

// 获取返回的数据

HttpEntity entity = httpResponse.getEntity();

byte[] body = EntityUtils.toByteArray(entity);

StatusLine sL = httpResponse.getStatusLine();

int statusCode = sL.getStatusCode();

if (statusCode == 200) {

json = new String(body, charset);

entity.consumeContent();

} else {

throw new HttpException("statusCode="+statusCode);

}

return json;

}

二、第二种方式,通过流的形式,贴代码:

/**

* 发送http get请求

*

* @param getUrl

* @return

*/

public String sendGetRequest(String getUrl)

{

StringBuffer sb = new StringBuffer();

InputStreamReader isr = null;

BufferedReader br = null;

try

{

URL url = new URL(getUrl);

URLConnection urlConnection = url.openConnection();

urlConnection.setAllowUserInteraction(false);

isr = new InputStreamReader(url.openStream());

br = new BufferedReader(isr);

String line;

while ((line = br.readLine()) != null)

{

sb.append(line);

}

}

catch (IOException e)

{

e.printStackTrace();

}

finally

{

fileOperator.closeResources(isr, br);

}

return sb.toString();

}

}

这两种实现方式不同,怎么使用看个人喜好吧,不过我在项目开发过程中,使用流的方式部署在预发机(linux机器)上会出现返回null的情况,但是本地windows却正常访问,而且,换另外一台预发机也能正常获取数据,目前还没有研究出个所以然。。。

以上这篇java发送http get请求的两种方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP/1.1规范中,GET请求是不支持请求体(request body)的,只有POST请求及其它一些请求方式支持。但是在实际中,有时候需要在发送GET请求时带上一些参数,这些参数需要通过请求体来传递,这种情况下可以采用以下两种方式实现: 1. 利用HTTP Post来模拟HTTP Get带body 代码示例: ```java URL url = new URL("http://example.com/resource"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write("param1=value1&param2=value2"); writer.flush(); String line; BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); while ((line = reader.readLine()) != null) { System.out.println(line); } writer.close(); reader.close(); ``` 2. 采用HTTP Get方式,但在请求URL中带上参数 代码示例: ```java String url = "http://example.com/resource?param1=value1&param2=value2"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); ``` 需要注意的是,第二种方式虽然可以在请求体中传递参数,但是可能会被一些HTTP代理服务器或者Web服务器认为是不符合规范的请求,因此并不是所有的Web服务器都支持此方式。建议采用第一种方式来发送带请求体的请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值