使用http-server做简单本地代理

在使用默认本地服务直接输入http-server即可。

http-server可以在前面起一个简单快捷得服务。

使用步骤

  1. yarn  add http-server -g 全局安装
  2. http-server -P https://xxxx:2443 -p 9000 . 在当前目录输入
  3. -P或者--proxy:代理所有无法在本地解析到给定 url 的请求。例如:-P http://XXXX.com
  4. -p或--port:要使用的端口。用于-p 0查找从 8080 开始的开放端口。

参考api

命令描述默认值
-p或--port要使用的端口。用于-p 0查找从 8080 开始的开放端口。8080
-a使用地址0.0.0.0
-d显示目录列表true
-i显示自动索引true
-g或者--gzip启用后,它将./public/some-file.js.gz代替./public/some-file.js文件的 gzip 版本存在并且请求接受 gzip 编码。如果 brotli 也被启用,它会首先尝试提供 brotli。false
-b或者--brotli启用后,它将./public/some-file.js.br代替./public/some-file.js文件的 brotli 压缩版本存在并且请求接受br编码时提供服务。如果 gzip 也被启用,它会首先尝试提供 brotli。false
-e或者--ext如果未提供默认文件扩展名html
-s或者--silent禁止输出中的日志消息
--corsAccess-Control-Allow-Origin通过标头启用 CORS
-o [path]启动服务器后打开浏览器窗口。(可选)提供要打开的 URL 路径。例如:-o /其他/目录/
-c为缓存控制 max-age 标头设置缓存时间(以秒为单位),例如-c1010 秒。要禁用缓存,请使用-c-1.3600
-U或者--utc在日志消息中使用 UTC 时间格式。
--log-ip启用客户端 IP 地址的日志记录false
-P或者--proxy代理所有无法在本地解析到给定 url 的请求。例如:-P http://someurl.com
--proxy-options使用嵌套的虚线对象传递代理选项。例如:--proxy-options.secure false
--username基本身份验证的用户名
--password基本认证密码
-S,--tls--ssl启用使用 TLS/SSL (HTTPS) 的安全请求服务false
-C或者--certssl 证书文件的路径cert.pem
-K或者--keyssl 密钥文件的路径key.pem
-r或者--robots自动提供一个 /robots.txt (其内容默认为User-agent: *\nDisallow: /false
--no-dotfiles不显示点文件
--mimetypes用于自定义 mimetype 定义的 .types 文件的路径
-h或者--help打印此列表并退出。
-v或者--version打印版本并退出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java实现HTTP/HTTPS代理的示例代码: ``` import java.net.*; import java.io.*; public class ProxyServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); while (true) { Socket clientSocket = serverSocket.accept(); Thread thread = new Thread(new ProxyHandler(clientSocket)); thread.start(); } } } class ProxyHandler implements Runnable { private Socket clientSocket; public ProxyHandler(Socket clientSocket) { this.clientSocket = clientSocket; } @Override public void run() { try { BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; String url = null; boolean isHttps = false; while ((inputLine = in.readLine()) != null && inputLine.length() > 0) { if (inputLine.startsWith("CONNECT")) { isHttps = true; url = inputLine.split(" ")[1]; } else if (inputLine.startsWith("GET")) { url = inputLine.split(" ")[1]; } } if (url != null) { int port = isHttps ? 443 : 80; String host = url.split("/")[0]; Socket serverSocket = new Socket(host, port); OutputStream out = serverSocket.getOutputStream(); if (isHttps) { out.write("HTTP/1.1 200 Connection established\r\n\r\n".getBytes()); out.flush(); } else { out.write(("GET " + url + " HTTP/1.1\r\n").getBytes()); out.write(("Host: " + host + "\r\n").getBytes()); out.write("\r\n".getBytes()); out.flush(); } InputStream serverIn = serverSocket.getInputStream(); OutputStream clientOut = clientSocket.getOutputStream(); byte[] buffer = new byte[4096]; int len; while ((len = serverIn.read(buffer)) != -1) { clientOut.write(buffer, 0, len); clientOut.flush(); } serverSocket.close(); } clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 该代理服务器将监听本地端口8080,可以接收来自客户端的HTTP/HTTPS请求。当收到请求后,它会解析请求中的URL和请求类型,并向目标服务器发送相应的请求。如果是HTTPS请求,则需要发送一个“CONNECT”请求,以便建立安全连接。如果是HTTP请求,则直接将请求转发给目标服务器。 该代理服务器使用多线程来处理多个客户端请求,因此可以同时处理多个请求。但是,这个示例代码并不完善,有一些问题需要注意: - 它没有对请求进行身份验证或授权。 - 它无法处理包含身份验证或授权的请求。 - 它不支持缓存或压缩。 - 它不支持WebSocket或其他高级HTTP功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值