当前位置: 代码迷 >> Java相关 >> socket连csdn主页
  详细解决方案

socket连csdn主页

热度:105   发布时间:2016-04-22 21:02:49.0
socket连csdn首页
用soket连csdn首页,返回的是乱码?
但是估计修改请求头导致csdn返回错误页面的时候,却不是乱码,是什么原因?
代码如下:

public class CSDNTest {

public static void main(String[] args) {
Socket socket = null;
BufferedReader br = null;
try {
socket = new Socket("www.csdn.net", 80);

StringBuffer sb = new StringBuffer("GET / HTTP/1.1\r\n");
sb.append("Host: www.csdn.net\r\n");
sb
.append("User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0\r\n");
sb
.append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
sb
.append("Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n");
sb.append("Accept-Encoding: gzip, deflate\r\n");
sb.append("Connection: keep-alive\r\n");
sb.append("If-Modified-Since: Sun, 20 Jul 2014 14:40:02 GMT\r\n");
sb.append("Cache-Control: max-age=0\r\n\r\n");
socket.getOutputStream().write(sb.toString().getBytes());

br = new BufferedReader(new InputStreamReader(socket
.getInputStream(), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

------解决方案--------------------
引用:
Quote: 引用:

目测和这个同样的问题
http://bbs.csdn.net/topics/390808091
看我3、4楼的回答
一般Web服务器返回的数据采用gzip压缩,所以你要先解压


确实是这个问题,但是我试了httpClient和httpUrlconnection都是无需GZIP解压的
它们内部会根据Content-Encoding自动解压?

对 他们都会自动解析header然后帮你预先处理好数据,所以一般还是用他们好,用socket学习一下http协议还行,真正用太麻烦
  相关解决方案