使用Socket发送Http请求
来源:互联网 发布:编程教学 编辑:程序博客网 时间:2024/05/02 00:54
1、建立TCP连接。
SocketAddress addr = new InetSocketAddress("www.baidu.com",80);Socket sock = new Socket();sock.connect(addr);
2、构建HTTP请求头并发送HTTP请求。
String[] headers = {"GET / HTTP/1.1\r\n","Host: www.baidu.com\r\n","\r\n"};OutputStream out = sock.getOutputStream();for(int i=0; i<headers.length; i++) out.write(headers[i].getBytes());out.flush();
headers可以根据需要自行构建,可以增加更多内容。但是请保证headers[i]以"\r\n"结尾,最后一个元素为"\r\n"。
3、接收HTTP响应。
InputStream in = sock.getInputStream();StringBuffer buf = new StringBuffer();sock.setSoTimeout(2000); while(true) { try { len = in.read(b); buf.append(new String(b,0,len,"UTF-8")); } catch(SocketTimeoutException e) { in.close(); out.close(); sock.close(); break; }}
使用setSoTimeout(),单位毫秒。因为每次从网络读完文件之后,read()函数仍会一直阻塞直到socket超时。即使代码改成
while((len=in.read(b)) != -1) {//省略try catch buf.append(new String(b,0,len,"UTF-8")); }
这样,也没有办法阻止读完之后的阻塞等待。所以设置一个合适的超时时间来避免这种情况。如果哪位可以解决这个问题,欢迎留言。
4、分离响应头与正文。
String result = buf.toString();int pos = result.indexOf("\r\n\r\n");//第一个\r\n\r\n的位置,正文内可能也有\r\n\r\nString header = result.subString(0,pos);String text = result.subString(pos+4);
经过这四步,即可完成一次HTTP请求。当然部分细节需要自己去完善。
0 0
- 使用SOCKET发送HTTP请求
- 使用Socket发送Http请求
- 使用Socket发送Http请求
- 使用socket发送http请求(GET/POST)
- 使用socket发送http请求(GET/POST)
- 使用socket发送http请求(GET/POST)
- socket 发送http请求
- socket发送http请求
- socket 发送http请求
- c socket 发送http请求
- c++ socket 发送HTTP请求
- java socket发送http请求
- Network:socket发送http请求
- C socket 发送HTTP请求
- socket模拟http发送请求
- c++ socket发送http请求
- 练习使用 socket 发送简单的 HTTP GET 请求
- 使用Socket发送接收HTTP请求(JAVA)
- myeclipse 选中效果属性、方法同属性变色
- 详细介绍Screenshot Reader支持的语言和文档格式
- Arch Linux 安装小记
- 使用Socket发送Http请求
- 多线程学习
- 使用Socket发送Http请求
- Android进阶——自定义View之扩展系统Dialog
- 虚拟机不能启动,E_FAIL(0x80004005) 及其处理
- md5加密 控制台传入与web传入参数 md5加密结果不同
- Struts2实现文件上传和下载
- 需求管理和控制方面,项目经理、产品经理应怎么配合?
- 机器学习----SVM(3)核函数
- 网页书签
- Java NIO Socket通信