httpbin

70行node.js代码实现一个类nginx的http代理(且支持身份验证)

微笑、不失礼 提交于 2020-02-28 07:57:04
先说说背景。 有时我们需要把一个自身不带有权限验证的服务暴露出去,为了提高安全性,我们希望用户访问该服务时,提供一个校验令牌。无令牌就拒绝访问。 所以我决定挑战下自己,写一个能满足上述需求的http代理,基于Node.js和TypeScript。 我们先看看使用效果。代码已经上传到npm仓库。 # 安装 npm i -g @youmoo/lets-proxy # 运行 PORT=9999 lets-proxy "https://httpbin.org" "hello world" 上述命令先是安装了 @youmoo/lets-proxy 模块,该模块会自动往你的 PATH 中添加一个名为 lets-proxy 的命令;然后执行它。 PORT 参数指定监听的端口,第一个参数 https://httpbin.org 指定要代理哪个服务;第二个参数 hello world 是校验码。 既然上面我们代理了 https://httpbin.org 的网站,我们对比一下通过代理访问和通过原网站访问的实际效果。 访问首页: 我们看到本地出现了 Forbidden 提示。这是因为我们没有在浏览器中设置校验码。我们打开左边页面的chrome控制台,加入一个带有 hello world 字样的 cookie 。 cookie 设置好后,我们再刷新此页面: 可以看到代理成功了。 httpbin.org

介绍 golang json数据的处理

▼魔方 西西 提交于 2020-01-07 19:05:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用golang下的net/http模块,可以很容易的实现webserver功能。 本篇 就结合http模块在POST发送josn数据给webserver以及webserver在收到json数据后如何处理。 一、server端处理json数据 server端代码如下: package main import ( "net/http" "fmt" "log" "encoding/json" ) type User struct{ Id string Balance uint64 } func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { var u User if r.Body == nil { http.Error(w, "Please send a request body", 400) return } err := json.NewDecoder(r.Body).Decode(&u) if err != nil { http.Error(w, err.Error(), 400) return } fmt.Println(u.Id) }) log.Fatal(http.ListenAndServe("

RESTful API 是什么?

北城余情 提交于 2019-12-10 02:37:02
RESTful是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。简单的说:服务器上每一种资源,比如一个文件,一张图片,一部电影,都有对应的url地址,如果我们的客户端需要对服务器上的这个资源进行操作,就需要通过http协议执行相应的动作来操作它,比如进行获取,更新,删除等。 REST的原则: (1)资源与URI (2)统一资源接口 (3)资源的表述 (4)资源的链接 (5)状态的转移 本文基于Python开发,用httpbin模块作为测试服务器来讲解 1.发送get请求 # -*- coding:utf-8 -*- import pprint,requests def main(): response = requests.get( 'http://127.0.0.1:5000/get', params={'foo':'bar'} ) pprint.pprint(response.json()) if __name__ == '__main__': main() 执行后返回结果: {'args': {'foo': 'bar'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive',