java请求header_java中处理header请求以及跟cookie相关的一些细节

上面的请求头中,我们可以看到cookie不同变量之间是用分号间隔的,没有包含phpsessionid。在某些处理http协议的java包中,可以看到对header的生成提供了专门的方法,类似于addHeader()这样的,有的还封装了专门针对cookie的方法,搞得好像cookie和header是两码事,我在用org.apache.http的时候都被搞晕了。http协议很简单,能放数据的地方真的不多,那些额外的数据几乎都是放在header中。

所以我还是觉得在使用那些看似方便的包之前还是从最基础的java.net.HttpURLConnection来实现http联网操作。

使用java.net

使用java.net一般只需引入两个类就可以了:import java.net.HttpURLConnection;

import java.net.URL;

准备

首先你需要一个url,以及字符集charset,url后面的参数为可选的。如下在代码中先定义url、字符集以及由两个参数param1,param2组成的查询参数。String url = "http://example.com";

String charset = "UTF-8";

String param1 = "value1";

String param2 = "value2";

// ...

String query = String.format("param1=%s&param2=%s",

URLEncoder.encode(param1, charset),

URLEncoder.encode(param2, charset));

查询参数都是有name=value这种形式组成的不同的name=value

之间用&分割。参数可以用 URL-encode指定字符集,

发起一个get请求

代码如下:URLConnection connection = new URL(url + "?" + query).openConnection();

connection.setRequestProperty("Accept-Charset", charset);

InputStream response = connection.getInputStream();

// ...

在url与查询条件之间需要用‘?’连接请求头Accept-Charset暗示服务器传入的参数是何种字符集,如果你根本没有参数,可以不用在header中保留Accept-Charset一项。如果你连header都不需要,发起一个get请求甚至可以简化成这样:InputStream response = new URL(url).openStream();

// ...

实际上发出get请求我们还需要指定method为getconnection.setRequestMethod("GET");

但是默认请求就是get的因此上面那行代码也可以不要。

发起post请求

将URLConnection#setDoOutput()设置为true则意味着请求是post的,即使调用了

setDoOutput(true)会使setRequestMethod("GET")无效。URLConnection connection = new URL(url).openConnection();

connection.setDoOutput(true); // Triggers POST.

connection.setRequestProperty("Accept-Charset", charset);

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);

OutputStream output = connection.getOutputStream();

try {

output.write(query.getBytes(charset));

} finally {

try { output.close(); } catch (IOException logOrIgnore) {}

}

InputStream response = connection.getInputStream();

// ...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值