HTTP 简易浏览器

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class HttpClient {
    private static final String endLine = "\r\n";
    public static void main(String[] args) {
        // 默认请求的资源
        String uri = "index.html";
        if (args.length != 0){
            uri = args[0];
        }

        // 处理 get 请求
        // doGet("localhost", 80, uri);
        doGet("www.baidu.com", 80, "/");
    }

    /**
     * 向指定服务器发送 get 请求
     * @param host 目标服务器
     * @param port 目标服务器的端口号
     * @param uri  请求的资源名称
     */
    public static void doGet(String host, int port, String uri){
        Socket socket = null;

        try {
            socket =new Socket(host, port);

            StringBuffer stringBuffer = new StringBuffer();

            // HTTP 协议 请求行    请求方式    请求内容   HTTP协议版本号
            // stringBuffer.append("GET / HTTP/1.1" + endLine);
            stringBuffer.append("GET " + uri + " HTTP/1.1" + endLine);

            // 请求头
            // 客户端能接受的文件类型
            stringBuffer.append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + endLine);
            // 客户端能接受的压缩格式
            // stringBuffer.append("Accept-Encoding: gzip, deflate, br" + endLine);
            // 客户端能够接受的语言
            stringBuffer.append("Accept-Language: zh-CN,zh;q=0.9" + endLine);
            // 客户端与服务器的连接状态
            stringBuffer.append("Connection: keep-alive"+ endLine);
            // 目标主机
            stringBuffer.append("Host: " + host + endLine);
            // 用户代理,代表用户的身份,浏览器版本号、系统架构、系统版本。
            stringBuffer.append("User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + endLine);

            // 请求头后需要以后一个空行
            stringBuffer.append(endLine);

            // 准备当前的输入输出流
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();

            // 向服务器发送请求内容
            outputStream.write(stringBuffer.toString().getBytes());
            // 程序睡眠 5s
            Thread.sleep(5000);

            int size = inputStream.available();
            byte[] bytes = new byte[size];
            int length = inputStream.read(bytes);

            String text = new String(bytes, 0, length);
            System.out.println(text);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用MFC框架创建简易浏览器的简单步骤: 1. 创建一个新的MFC应用程序项目。 2. 在资源视图中添加一个WebBrowser控件,使用拖放方式添加到主窗口。 3. 在主窗口类中添加一个成员变量,用于引用WebBrowser控件,例如:CWebBrowser2 m_browser。 4. 在OnInitDialog函数中添加以下代码,以初始化WebBrowser控件: m_browser.Navigate(_T("http://www.google.com"), NULL, NULL, NULL, NULL); 5. 在主窗口类中添加一个成员函数,用于响应WebBrowser控件的导航完成事件,例如: void CMyBrowserDlg::OnDocumentComplete(LPDISPATCH pDisp, VARIANT* URL) { CString strURL(URL->bstrVal); SetWindowText(strURL); } 6. 在主窗口类的消息映射中添加以下代码,以响应WebBrowser控件的导航完成事件: ON_EVENT(CMyBrowserDlg, IDC_EXPLORER1, 259, OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT) 7. 在主窗口类中添加一个成员函数,用于响应“后退”按钮的单击事件,例如: void CMyBrowserDlg::OnBack() { m_browser.GoBack(); } 8. 在主窗口类的消息映射中添加以下代码,以响应“后退”按钮的单击事件: ON_COMMAND(IDC_BACK, OnBack) 9. 在主窗口类中添加一个成员函数,用于响应“前进”按钮的单击事件,例如: void CMyBrowserDlg::OnForward() { m_browser.GoForward(); } 10. 在主窗口类的消息映射中添加以下代码,以响应“前进”按钮的单击事件: ON_COMMAND(IDC_FORWARD, OnForward) 11. 编译并运行程序,即可看到一个简单的浏览器界面,可以在地址栏输入URL,通过“后退”和“前进”按钮浏览网页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值