关于HTTP请求报头的字符编码问题.
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
的结果.
现在的问题是:我怎样才能知道这个字符编码究竟是什么?
------解决方案--------------------浏览器默认使用UTF-8编码方式来发送请求,你可以看行不?怎么获取就不知道了!
------解决方案--------------------服务器返回信息里有charset 和 encoding字段~~
实在不知道,你可以抓包分析~