日期:2014-05-18  浏览次数:20670 次

关于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字段~~
实在不知道,你可以抓包分析~