Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
R
requests
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
requests
Commits
462befb8
Commit
462befb8
authored
May 24, 2023
by
wangmingming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
处理入参cookie
parent
48d769fd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
101 additions
and
12 deletions
+101
-12
Response.go
models/Response.go
+2
-5
sessions.go
sessions.go
+98
-5
Requests.go
url/Requests.go
+1
-2
No files found.
models/Response.go
View file @
462befb8
...
...
@@ -5,19 +5,16 @@ import (
"errors"
"fmt"
"github.com/bitly/go-simplejson"
http
"github.com/bogdanfinn/fhttp"
"github.com/wmm1996528/requests/url"
"io"
)
// Response结构体
type
Response
struct
{
Url
string
Headers
url
.
Header
Cookies
[]
*
http
.
Cookie
Cookies
map
[
string
]
string
Text
string
Content
[]
byte
Body
io
.
ReadCloser
StatusCode
int
History
[]
*
Response
Request
*
url
.
Request
...
...
@@ -32,7 +29,7 @@ func (res *Response) Json() (map[string]interface{}, error) {
// 使用go-simplejson解析
func
(
res
*
Response
)
SimpleJson
()
(
*
simplejson
.
Json
,
error
)
{
return
simplejson
.
New
FromReader
(
res
.
Body
)
return
simplejson
.
New
Json
(
res
.
Content
)
}
// 状态码是否错误
...
...
sessions.go
View file @
462befb8
...
...
@@ -2,7 +2,11 @@ package requests
import
(
"bytes"
"compress/flate"
"compress/gzip"
"encoding/binary"
"encoding/json"
"github.com/andybalholm/brotli"
http
"github.com/bogdanfinn/fhttp"
"github.com/bogdanfinn/fhttp/cookiejar"
tls_client
"github.com/bogdanfinn/tls-client"
...
...
@@ -10,6 +14,9 @@ import (
"github.com/wmm1996528/requests/tls"
"github.com/wmm1996528/requests/url"
"io"
"io/ioutil"
url2
"net/url"
"strings"
)
func
NewSession
(
tlsVersion
tls
.
TlsVersion
)
*
Session
{
...
...
@@ -91,7 +98,12 @@ func (s *Session) Do(method string, request *url.Request) (*models.Response, err
if
s
.
Client
==
nil
{
// 初始化个新的
s
.
Client
=
tls
.
NewClient
(
request
.
TlsProfile
)
}
// 处理cookie
if
request
.
Cookies
!=
nil
{
var
cks
[]
*
http
.
Cookie
uri
,
_
:=
url2
.
Parse
(
request
.
Url
)
s
.
Client
.
SetCookies
(
uri
,
cks
)
}
request
.
Method
=
method
...
...
@@ -137,29 +149,110 @@ func (s *Session) PreData(request *url.Request) ([]byte, error) {
if
request
.
Data
!=
nil
{
return
[]
byte
(
request
.
Data
.
Encode
()),
nil
}
if
request
.
Body
!=
""
{
return
[]
byte
(
request
.
Body
),
nil
}
return
[]
byte
{},
nil
}
// PreResponse 处理请求返回
func
(
s
*
Session
)
PreResponse
(
request
*
url
.
Request
,
do
*
http
.
Response
)
(
*
models
.
Response
,
error
)
{
reader
:=
http
.
DecompressBody
(
do
)
rb
,
_
:=
io
.
ReadAll
(
reader
)
rb
,
err
:=
io
.
ReadAll
(
do
.
Body
)
if
err
!=
nil
{
return
nil
,
err
}
encoding
:=
do
.
Header
.
Get
(
"Content-Encoding"
)
DecompressBody
(
&
rb
,
encoding
)
redirectURL
,
err
:=
do
.
Location
()
redirectUrl
:=
""
if
err
==
nil
{
// 没有错误时从跳转的location 获取url
redirectUrl
=
redirectURL
.
String
()
}
else
{
redirectUrl
=
request
.
Url
}
resp
:=
&
models
.
Response
{
Url
:
redirectUrl
,
Headers
:
url
.
Header
(
do
.
Header
),
Cookies
:
do
.
Cookies
(
),
Cookies
:
s
.
getAllCookie
(
request
),
Text
:
string
(
rb
),
Content
:
rb
,
Body
:
reader
,
StatusCode
:
do
.
StatusCode
,
Request
:
request
,
}
return
resp
,
nil
}
func
(
s
*
Session
)
getAllCookie
(
request
*
url
.
Request
)
map
[
string
]
string
{
res
:=
make
(
map
[
string
]
string
)
uri
,
_
:=
url2
.
Parse
(
request
.
Url
)
cks
:=
s
.
Client
.
GetCookies
(
uri
)
for
_
,
ck
:=
range
cks
{
res
[
ck
.
Name
]
=
ck
.
Value
}
return
res
}
// 解码Body数据
func
DecompressBody
(
content
*
[]
byte
,
encoding
string
)
{
if
encoding
!=
""
{
if
strings
.
ToLower
(
encoding
)
==
"gzip"
{
decodeGZip
(
content
)
}
else
if
strings
.
ToLower
(
encoding
)
==
"deflate"
{
decodeDeflate
(
content
)
}
else
if
strings
.
ToLower
(
encoding
)
==
"br"
{
decodeBrotli
(
content
)
}
}
}
// 解码GZip编码
func
decodeGZip
(
content
*
[]
byte
)
error
{
if
content
==
nil
{
return
nil
}
b
:=
new
(
bytes
.
Buffer
)
binary
.
Write
(
b
,
binary
.
LittleEndian
,
content
)
r
,
err
:=
gzip
.
NewReader
(
b
)
if
err
!=
nil
{
return
err
}
defer
r
.
Close
()
*
content
,
err
=
ioutil
.
ReadAll
(
r
)
if
err
!=
nil
{
return
err
}
return
nil
}
// 解码deflate编码
func
decodeDeflate
(
content
*
[]
byte
)
error
{
var
err
error
if
content
==
nil
{
return
err
}
r
:=
flate
.
NewReader
(
bytes
.
NewReader
(
*
content
))
defer
r
.
Close
()
*
content
,
err
=
ioutil
.
ReadAll
(
r
)
if
err
!=
nil
{
return
err
}
return
nil
}
// 解码br编码
func
decodeBrotli
(
content
*
[]
byte
)
error
{
var
err
error
if
content
==
nil
{
return
err
}
r
:=
brotli
.
NewReader
(
bytes
.
NewReader
(
*
content
))
*
content
,
err
=
ioutil
.
ReadAll
(
r
)
if
err
!=
nil
{
return
err
}
return
nil
}
url/Requests.go
View file @
462befb8
package
url
import
(
"github.com/bogdanfinn/fhttp/cookiejar"
"github.com/wmm1996528/requests/tls"
"time"
)
...
...
@@ -16,7 +15,7 @@ func NewRequest() *Request {
type
Request
struct
{
Params
*
Params
Headers
*
Header
Cookies
*
cookiejar
.
Jar
Cookies
map
[
string
]
string
Data
*
Values
Json
map
[
string
]
interface
{}
Body
string
...
...
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