Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
T
tls-forward
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangmingming
tls-forward
Commits
5fe5780b
Commit
5fe5780b
authored
May 04, 2023
by
wangmingming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
11
parents
Pipeline
#356
canceled with stages
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
432 additions
and
0 deletions
+432
-0
go.mod
go.mod
+45
-0
go.sum
go.sum
+106
-0
main.go
main.go
+95
-0
client.go
tls/client.go
+128
-0
tls.go
tls/tls.go
+58
-0
No files found.
go.mod
0 → 100644
View file @
5fe5780b
module tls-forward
go 1.20
require (
github.com/antonfisher/nested-logrus-formatter v1.3.1
github.com/bogdanfinn/tls-client v1.3.11
github.com/gin-gonic/gin v1.9.0
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/sirupsen/logrus v1.9.0
)
require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/andybalholm/brotli v1.0.4 // indirect
github.com/bogdanfinn/fhttp v0.5.22 // indirect
github.com/bogdanfinn/utls v1.5.16 // indirect
github.com/bytedance/sonic v1.8.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.11.2 // indirect
github.com/goccy/go-json v0.10.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.15.12 // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.9 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/crypto v0.5.0 // indirect
golang.org/x/net v0.7.0 // indirect
golang.org/x/sys v0.5.0 // indirect
golang.org/x/text v0.7.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
go.sum
0 → 100644
View file @
5fe5780b
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UMEoHck02Q9L0FP13b/xSbQ=
github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA=
github.com/bogdanfinn/fhttp v0.5.22 h1:U1jhZRtuaOanWWcm1WdMFnwMvSxUQgvO6berqAVTc5o=
github.com/bogdanfinn/fhttp v0.5.22/go.mod h1:brqi5woc5eSCVHdKYBV8aZLbO7HGqpwyDLeXW+fT18I=
github.com/bogdanfinn/tls-client v1.3.11 h1:3rI+ysCEtnLdmDYlL7cPq2kF3Sj+bSvhgaHPmjLbjOE=
github.com/bogdanfinn/tls-client v1.3.11/go.mod h1:+TLNqnOtUQmYu/qrd/qMuLleoHoTRCcZazkmvNYuiVc=
github.com/bogdanfinn/utls v1.5.16 h1:NhhWkegEcYETBMj9nvgO4lwvc6NcLH+znrXzO3gnw4M=
github.com/bogdanfinn/utls v1.5.16/go.mod h1:mHeRCi69cUiEyVBkKONB1cAbLjRcZnlJbGzttmiuK4o=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8=
github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM=
github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5 h1:YqAladjX7xpA6BM04leXMWAEjS0mTZ5kUU9KRBriQJc=
github.com/tam7t/hpkp v0.0.0-20160821193359-2b70b4024ed5/go.mod h1:2JjD2zLQYH5HO74y5+aE3remJQvl6q4Sn6aWA2wD1Ng=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU=
github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
main.go
0 → 100644
View file @
5fe5780b
package
main
import
(
nested
"github.com/antonfisher/nested-logrus-formatter"
"github.com/gin-gonic/gin"
"github.com/natefinch/lumberjack"
"github.com/sirupsen/logrus"
"time"
"tls-forward/tls"
)
func
main
()
{
logrus
.
SetLevel
(
logrus
.
InfoLevel
)
//logrus.SetFormatter(&logrus.TextFormatter{
// //HideKeys: true,
// TimestampFormat: "2006-01-02 15:04:05.000", //时间格式
// FullTimestamp: true,haox
//})
logrus
.
SetFormatter
(
&
nested
.
Formatter
{
HideKeys
:
true
,
FieldsOrder
:
[]
string
{
"type"
},
TimestampFormat
:
"2006-01-02 15:04:05.000"
,
//时间格式
NoColors
:
true
,
})
// 写入文件
//src, err := os.OpenFile(fileName+".log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, os.ModeAppend)
//logrus.SetOutput(src)
//if err != nil {
// fmt.Println("err", err)
//
//}
logWriter
:=
&
lumberjack
.
Logger
{
// 日志输出文件路径
Filename
:
"/data/log/tls-forward/tls.log"
,
// 日志文件最大 size, 单位是 MB
MaxSize
:
100
,
// megabytes
// 最大过期日志保留的个数
MaxBackups
:
3
,
// 保留过期文件的最大时间间隔,单位是天
MaxAge
:
28
,
//days
// 是否需要压缩滚动日志, 使用的 gzip 压缩
Compress
:
true
,
// disabled by default
}
logrus
.
SetOutput
(
logWriter
)
r
:=
gin
.
New
()
//创建一个默认的路由引擎
r
.
Use
(
LoggerMiddleware
())
r
.
POST
(
"/tls/forward"
,
tls
.
Forward
)
r
.
Run
(
":58000"
)
}
func
LoggerMiddleware
()
gin
.
HandlerFunc
{
return
func
(
c
*
gin
.
Context
)
{
startTime
:=
time
.
Now
()
//crw := &CustomResponseWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
//c.Writer = crw
//// 打印请求信息
//reqBody, _ := c.GetRawData()
//logrus.Infof("uri: %s params: %s", c.Request.RequestURI, string(reqBody))
//c.Request.Body = io.NopCloser(bytes.NewBuffer(reqBody))
c
.
Next
()
// 调用该请求的剩余处理程序
stopTime
:=
time
.
Since
(
startTime
)
spendTime
:=
stopTime
.
String
()
statusCode
:=
c
.
Writer
.
Status
()
//clientIP := c.ClientIP()
//userAgent := c.Request.UserAgent()
method
:=
c
.
Request
.
Method
url
:=
c
.
Request
.
RequestURI
Log
:=
logrus
.
WithFields
(
logrus
.
Fields
{
//"HostName": hostName,
"SpendTime"
:
spendTime
,
"path"
:
url
,
"Method"
:
method
,
"status"
:
statusCode
,
//"Ip": clientIP,
//"DataSize": dataSize,
//"UserAgent": userAgent,
})
Log
.
Info
()
//if len(c.Errors) > 0 { // 矿建内部错误
// Log.Error(c.Errors.ByType(gin.ErrorTypePrivate))
//}
//if statusCode >= 500 {
// Log.Error()
//} else if statusCode >= 400 {
// Log.Warn()
//} else {
// Log.Info()
//}
}
}
tls/client.go
0 → 100644
View file @
5fe5780b
package
tls
import
(
"errors"
http
"github.com/bogdanfinn/fhttp"
tls_client
"github.com/bogdanfinn/tls-client"
"github.com/sirupsen/logrus"
"io"
"net/url"
"strings"
)
type
Client
struct
{
Client
tls_client
.
HttpClient
Jar
tls_client
.
CookieJar
Item
ForwardItem
Response
*
http
.
Response
uri
*
url
.
URL
}
func
(
c
*
Client
)
Start
()
error
{
var
req
*
http
.
Request
var
err
error
uri
,
err
:=
url
.
Parse
(
c
.
Item
.
Url
)
c
.
uri
=
uri
cookie
:=
c
.
Item
.
Headers
[
"cookie"
]
delete
(
c
.
Item
.
Headers
,
"cookie"
)
if
cookie
==
""
{
cookie
=
c
.
Item
.
Headers
[
"Cookie"
]
delete
(
c
.
Item
.
Headers
,
"Cookie"
)
}
if
cookie
==
""
{
return
errors
.
New
(
"未设置cookie"
)
}
var
cookies
[]
*
http
.
Cookie
cks
:=
strings
.
Split
(
cookie
,
";"
)
for
_
,
ck
:=
range
cks
{
t
:=
strings
.
Split
(
strings
.
TrimSpace
(
ck
),
"="
)
cookies
=
append
(
cookies
,
&
http
.
Cookie
{
Name
:
t
[
0
],
Value
:
t
[
1
],
})
}
c
.
Jar
.
SetCookies
(
uri
,
cookies
)
if
err
!=
nil
{
return
err
}
if
strings
.
ToUpper
(
c
.
Item
.
Method
)
==
"GET"
{
req
,
err
=
http
.
NewRequest
(
http
.
MethodGet
,
c
.
Item
.
Url
,
nil
)
}
else
{
req
,
err
=
http
.
NewRequest
(
http
.
MethodPost
,
c
.
Item
.
Url
,
strings
.
NewReader
(
c
.
Item
.
Data
))
}
if
err
!=
nil
{
logrus
.
Error
(
"url初始化失败 "
,
err
.
Error
())
return
err
}
for
k
,
v
:=
range
c
.
Item
.
Headers
{
req
.
Header
.
Set
(
k
,
v
)
}
resp
,
err
:=
c
.
Client
.
Do
(
req
)
if
err
!=
nil
{
logrus
.
Error
(
"请求失败 "
,
err
.
Error
())
return
nil
}
c
.
Response
=
resp
return
nil
}
func
(
c
*
Client
)
GetResponseHeaders
()
map
[
string
]
string
{
res
:=
make
(
map
[
string
]
string
)
for
k
,
v
:=
range
c
.
Response
.
Header
{
res
[
k
]
=
v
[
0
]
}
return
res
}
func
(
c
*
Client
)
GetSessionCookies
()
map
[
string
]
string
{
res
:=
make
(
map
[
string
]
string
)
cks
:=
c
.
Jar
.
Cookies
(
c
.
uri
)
for
_
,
ck
:=
range
cks
{
res
[
ck
.
Name
]
=
ck
.
Value
}
return
res
}
func
(
c
*
Client
)
GetText
()
string
{
defer
c
.
Response
.
Body
.
Close
()
rb
,
_
:=
io
.
ReadAll
(
c
.
Response
.
Body
)
return
string
(
rb
)
}
func
(
c
*
Client
)
GetRespUrl
()
string
{
location
,
err
:=
c
.
Response
.
Location
()
if
err
!=
nil
{
logrus
.
Error
(
"获取respUrl失败 "
,
err
)
}
return
location
.
RequestURI
()
}
func
(
c
*
Client
)
GetStatusCode
()
int
{
return
c
.
Response
.
StatusCode
}
func
NewClient
(
forWard
ForwardItem
)
(
Client
,
error
)
{
jar
:=
tls_client
.
NewCookieJar
()
options
:=
[]
tls_client
.
HttpClientOption
{
tls_client
.
WithTimeoutSeconds
(
forWard
.
Timeout
),
tls_client
.
WithClientProfile
(
tls_client
.
Chrome_110
),
tls_client
.
WithProxyUrl
(
forWard
.
Proxy
),
//tls_client.WithForceHttp1(),
tls_client
.
WithCookieJar
(
jar
),
//tls_client.WithRandomTLSExtensionOrder(),
//tls_client.WithProxyUrl("http://user:pass@host:port"),
}
client
,
err
:=
tls_client
.
NewHttpClient
(
tls_client
.
NewNoopLogger
(),
options
...
)
client
.
SetFollowRedirect
(
forWard
.
AllowRedirects
)
if
err
!=
nil
{
return
Client
{},
err
}
return
Client
{
Client
:
client
,
Item
:
forWard
},
nil
}
tls/tls.go
0 → 100644
View file @
5fe5780b
package
tls
import
(
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"time"
)
type
ForwardItem
struct
{
Proxy
string
`json:"proxy,omitempty"`
Method
string
`json:"method,omitempty"`
Headers
map
[
string
]
string
`json:"headers,omitempty"`
Url
string
`json:"url,omitempty"`
Data
string
`json:"data,omitempty"`
Timeout
int
`json:"timeout,omitempty"`
AllowRedirects
bool
`json:"allow_redirects,omitempty"`
Verify
bool
`json:"verify,omitempty"`
}
func
Forward
(
c
*
gin
.
Context
)
{
var
forWard
ForwardItem
if
err
:=
c
.
ShouldBindJSON
(
&
forWard
);
err
!=
nil
{
logrus
.
Error
(
err
.
Error
())
c
.
JSON
(
400
,
gin
.
H
{
"msg"
:
err
.
Error
(),
})
return
}
t1
:=
time
.
Now
()
// 开始转发
client
,
err
:=
NewClient
(
forWard
)
if
err
!=
nil
{
logrus
.
Error
(
"client初始化失败 "
,
err
.
Error
())
c
.
JSON
(
400
,
gin
.
H
{
"msg"
:
"client初始化失败 "
+
err
.
Error
(),
})
return
}
if
err
:=
client
.
Start
();
err
!=
nil
{
logrus
.
Error
(
"请求失败 "
,
err
.
Error
())
c
.
JSON
(
400
,
gin
.
H
{
"msg"
:
"请求失败 "
+
err
.
Error
(),
})
return
}
res
:=
gin
.
H
{}
res
[
"msg"
]
=
"请求成功"
res
[
"status_code"
]
=
client
.
GetStatusCode
()
res
[
"text"
]
=
client
.
GetText
()
res
[
"proxy"
]
=
forWard
.
Proxy
res
[
"headers"
]
=
client
.
GetResponseHeaders
()
res
[
"cookies"
]
=
client
.
GetSessionCookies
()
res
[
"cost_time"
]
=
time
.
Now
()
.
Sub
(
t1
)
.
Milliseconds
()
res
[
"url"
]
=
client
.
GetRespUrl
()
logrus
.
Infof
(
"转发 %s %s %d 耗时 %s"
,
forWard
.
Url
,
forWard
.
Proxy
,
client
.
GetStatusCode
(),
time
.
Now
()
.
Sub
(
t1
)
.
String
())
c
.
JSON
(
200
,
res
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment