HTTP 请求模拟

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;

public class HttpSimulator {

    private Socket socket;
    private int port = 80;
    private String host = "localhost";
    private String request = "";
    private boolean isPost, isHead;

    public void run() {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            try {
                if(! readHostAndPort(reader)) {
                    break;
                }
                readHttpRequest(reader);
                sendHttpRequest();
                readHttpResponse(reader);
            }
            catch (Exception e) {
                System.out.println("err: " + e.getMessage());
            }
        }
    }

    public static void main(String[] args) {

        new HttpSimulator().run();
    }

    private boolean readHostAndPort(BufferedReader consoleReader) throws IOException {

        System.out.println("host:port> ");
        String[] ss = null;
        String s = consoleReader.readLine();
        if(s.equals("q")) {
            return false;

        }else{
            ss = s.split("[:]");
            if(!ss[0].equals(""))
                host = ss[0];
            if(ss.length > 1)
                port = Integer.parseInt(ss[1]);
            System.out.println(host + ":" + String.valueOf(port));
            return true;
        }
    }

    private void readHttpRequest(BufferedReader consoleReader) throws IOException {

        System.out.println("input HTTP Request: ");
        String s = consoleReader.readLine();
        request = s + "\r\n";

        isPost = s.substring(0, 4).equals("POST");
        isHead = s.substring(0, 4).equals("HEAD");

        while(!(s = consoleReader.readLine()).equals("")) {
            request = request + s + "\r\n";
        }

        request = request + "\r\n";
        if(isPost) {
            System.out.println("input POST Method contents: ");
            s = consoleReader.readLine();
            request = request + s;
        }
    }

    private void sendHttpRequest() throws IOException {

        socket = new Socket();
        socket.setSoTimeout(10 * 1000);
        System.out.println("wait for connecting to server...");
        socket.connect(new InetSocketAddress(host, port), 10 * 1000);
        System.out.println("connected to server successfully!");

        OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
        writer.write(request);
        writer.flush();
    }

    private void readHttpResponse(BufferedReader consoleReader) {

        String s = "";
        try {
            BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("---------- HTTP Header ----------");
            boolean b = true;
            while((s = socketReader.readLine()) != null) {
                if(s.equals("") && b == true && !isHead) {
                    System.out.println("--------------------");
                    b = false;
                    System.out.println("Show HTTP contents or not (Y/N): ");
                    String choice = consoleReader.readLine();
                    if(choice.equals("Y") || choice.equals("y")) {
                        System.out.println("---------- HTTP Contents ----------");
                        continue;
                    }else{
                        break;
                    }
                }else{
                    System.out.println(s);
                }
            }
        }
        catch (Exception e) {
            System.out.println("err: " + e.getMessage());
        }
        finally {
            try {
                socket.close();
            }
            catch (Exception e) {

            }
            System.out.println("--------------------");
        }
    }
}

------ Result ------

host:port>
10.11.121.232:80
input HTTP Request:
GET / HTTP/1.0
Host:10.11.121.232

wait for connecting to server...
connected to server successfully!
---------- HTTP Header ----------
HTTP/1.1 200 OK
Date: Fri, 21 Nov 2014 07:45:18 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Wed, 12 Nov 2014 13:06:02 GMT
ETag: "20831-b1-507a90ecdbd88"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
--------------------
Show HTTP contents or not (Y/N):

时间: 2024-07-30 14:22:41

HTTP 请求模拟的相关文章

Postman用法简介-Http请求模拟工具

在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件-RESTClient,Chrome浏览器插件-Postman等等.这里主要介绍一下Postman. 一.Postman说明 Postman是一种网页调试与发送网页http请求的chrome插件.我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口. 二.安装(安装到chrome插

谷歌chrome浏览器和火狐firefox浏览器自带http抓包工具和请求模拟插件

谷歌chrome浏览器自带http抓包工具 chrome://net-internals/ 谷歌chrome浏览器http请求模拟插件:postman 火狐http请求模拟插件:httprequest 火狐http抓包插件:firebug

MOOC(7)- case依赖、读取json配置文件进行多个接口请求-模拟接口响应数据(18)

这里是把传入的请求数据作为响应值返回 # -*- coding: utf-8 -*- # @Time : 2020/2/15 9:47 # @File : do_mock_18.py # @Author: Hero Liu # 接口不可用,模拟返回响应数据 import mock def mock_test(mock_method, url, method, request_data, response_data, header=None): mock_method = mock.Mock(re

在线GET/POST API接口请求模拟测试工具

在前后端开发过程中经常需要对HTTP接口进行测试,推荐几款比较好用的测试工具 Postman https://www.getpostman.com/ 强大的HTTP请求测试工具 支持多平台 Getman http://getman.cn/ 操作简单的在线HTTP请求测试工具

jQuery异步请求模拟IE登录网站

具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 2 3 <!DOCTYPE html PUBLIC &qu

ajax请求模拟登录

前台 @if (Session["username"] != null) { <div class="login"> <span style="width:155px;height:85px;display:inline-block;margin-left:50px;margin-top:25px;text-align:center"> @(Session["username"])  您好!<br

request请求模拟导出文件

ui界面: 实现代码: def export(self,host): '''导出课时券记录''' #测试接口 url='https://'+host+r'/ticket-record/export?timespan=1568010189362' #请求头 heard=self.public() #发送请求 r=self.codemao.request2.get(url,headers=heard) # 输出请求时长 print '请求时长:',r.elapsed.total_seconds()

nginx下请求模拟接口json返回405

修改nginx配置文件,在 server 块中添加以下内容: error_page 405 =200 @405; location @405 { proxy_method GET; proxy_pass http://localhost;# 此处应为你本地的地址 } 重启nginx,就能继续工作了~ 原文地址:https://www.cnblogs.com/HeCG95/p/12000093.html

20150108--HTTP协议+PHP模拟HTTP请求-02

HTTP协议 1. 什么是http协议? 协议:协议是一种双方约定好的规范,双方在做某一件事情的事情,必须按照事先定义好的规范去实现和操作. HTTP:超文本传输协议,HyperText Transport Protocol,超文本在服务器与浏览器之间传输的时候必须遵循的协议. 2. 什么是html? 超文本标记语言:HyperText Markup Language html的作用:保证同一数据在不同的电脑(用户),看到的效果一样. HTTP协议工作原理 HTTP协议特点 支持客户/服务器模式