用JAVA Socket向http服务器发送GET命令

闲的蛋疼,于是就打算写点什么。本来在研究简单TCPIP服务的,后来发现本机上居然没有,f**k ,于是就去搞搞http服务了。


本机上装的是apache Http服务器,网上找到http协议的格式,最简单的是 GET PATH HTTP/1.1 (CRLF) ,于是就用java写了起来。


第一次代码很简单, 直接用socket 连接本机80端口,然后向端口写"GET / HTTP/1.1"然后就等待。

结果。。就读不出来。百度之,  http 协议需要以俩个换行做结束符。于是就把代码改成这样。
 BufferedReader in = new BufferedReader( new InputStreamReader(soc.getInputStream()));
 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));

 out.write("GET / HTTP/1.1\r\n");
out.write("\r\n");
 out.flush(); 

结果,给我返回了400错误。当时把语法错误理解错了,以为是字符编码的问题,百度后找到个URLEncoder.encode设置字符的方法。

这倒好,直接返回了501错误。这个错误误导了我很长时间。

最后还是去查http协议,发现GET方法还有一些附加信息。加上附加信息后,调试成功。最后发现,其实只要在附加信息中指定host就可以了。我觉得这个可能和不同的http服务器有关。


代码如下



package baiyangtx;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class HttpConnection
{

    /**
     * @param args
     * @throws IOException 
     * @throws UnknownHostException 
     */
    public static void main(String[] args) throws UnknownHostException, IOException
    {
        String ip = "127.0.0.1" ;
        int port = 80 ;

        Socket soc = new Socket(ip, port);
        
        System.out.println("----------------------------------");
        System.out.println("\n\n\n\n");

        
        BufferedReader in = new BufferedReader( new InputStreamReader(soc.getInputStream()));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
        

        
        StringBuffer meth = new StringBuffer();
        meth.append("GET / HTTP/1.1\r\n");
     //   meth.append("accept:*/*\r\n");
        meth.append("host:127.0.0.1\r\n");
        meth.append("");
        meth.append("");
        

        out.write(meth.toString());
        out.write("\r\n");
        out.flush();  
        
        String line = null ;

        
        while( (line = in.readLine())!= null)
        {
            System.out.println(line);
        }
        
        in.close() ;
        out.close() ;
        soc.close() ;
    }

}



输出
----------------------------------





HTTP/1.1 200 OK
Date: Tue, 06 Mar 2012 12:32:58 GMT
Server: Apache/2.2.22 (Win32)
Last-Modified: Tue, 06 Mar 2012 11:46:06 GMT
ETag: "b000000008d9e-57-4ba9196947acd"
Accept-Ranges: bytes
Content-Length: 87
Content-Type: text/html

<head>
<title>?1?7?1?7?1?7?1?7?1?7?1?7?0?7</title>
</head>
<body> Here is body!</body>

</html>
   
终于看到了期待已久的HTTP/1.1 200 OK 。

<title>标签中的乱码是因为原来html文件中存的是中文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值