关于HTTP请求报头的字符编码问题.

flushtime 2007-04-14 02:17:17
RT,我现在已知一个文件的URL地址(http协议).
现在我想得到这个文件的相关信息,比如文件的大小.那么我要发送一个请求.
我是这样实现这个功能的:

private static DataInfo getDataInfo(URL addr)throws IOException{
String host =addr.getHost();
String file =addr.getFile();
int port =addr.getPort();
if(port==-1) port =80;
Socket s =new Socket(host,port);
PrintStream out =new PrintStream(s.getOutputStream(),false,"gb2312");
BufferedReader in =new BufferedReader(
new InputStreamReader(s.getInputStream(),"gb2312"));
out.print("HEAD "+file+" HTTP/1.1\r\n");
out.print("Host: "+host+":"+port+"\r\n");
out.print("Accept: */*\r\n");
out.print("Referer: "+addr+"\r\n");
out.print("User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n");
out.print("\r\n");
out.flush();
String str;
while((str=in.readLine())!=null){
//解析报文信息
}
out.close();
in.close();
...
}
注意,其中
PrintStream out =new PrintStream(s.getOutputStream(),false,"gb2312");
要指明字符编码,如果这里不正确的话,就会导致服务器不能正确识别请求信息,产生一个
HTTP/1.1 404 Object Not Found
的结果.

现在的问题是:我怎样才能知道这个字符编码究竟是什么?
...全文
753 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanxd39 2007-04-14
  • 打赏
  • 举报
回复
浏览器默认使用UTF-8编码方式来发送请求,你可以看行不?怎么获取就不知道了!
flushtime 2007-04-14
  • 打赏
  • 举报
回复
按楼上所说,那么我在实现getDataInfo之前,还得另外发送一次请求得到charset信息了?
因为我在getDataInfo里面就得使用这个信息了。
ykrocku 2007-04-14
  • 打赏
  • 举报
回复
服务器返回信息里有charset 和 encoding字段~~
实在不知道,你可以抓包分析~
flushtime 2007-04-14
  • 打赏
  • 举报
回复
谢谢楼上~

但确实有些网站是用其他编码格式的,是不是这个报文头的编码与对应网站的网页编码一定是一样的呢?

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧