mirror of
https://github.com/eolinker/apinto
synced 2025-10-05 08:47:04 +08:00
116 lines
2.0 KiB
Go
116 lines
2.0 KiB
Go
package http_context
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
|
|
http_service "github.com/eolinker/eosc/http-service"
|
|
)
|
|
|
|
var _ http_service.IRequest = (*ProxyRequest)(nil)
|
|
|
|
type ProxyRequest struct {
|
|
*RequestReader
|
|
headers http.Header
|
|
form url.Values
|
|
file map[string]*http_service.FileHeader
|
|
contentType string
|
|
body []byte
|
|
uri *url.URL
|
|
method string
|
|
}
|
|
|
|
func NewProxyRequest(requestReader *RequestReader) *ProxyRequest {
|
|
return &ProxyRequest{RequestReader: requestReader}
|
|
}
|
|
|
|
func (r *ProxyRequest) SetHeader(key, value string) {
|
|
if r.headers == nil {
|
|
r.headers = r.Headers()
|
|
}
|
|
r.headers.Set(key, value)
|
|
}
|
|
|
|
func (r *ProxyRequest) AddHeader(key, value string) {
|
|
if r.headers == nil {
|
|
r.headers = r.Headers()
|
|
}
|
|
r.headers.Add(key, value)
|
|
}
|
|
|
|
func (r *ProxyRequest) DelHeader(key string) {
|
|
if r.headers == nil {
|
|
r.headers = r.Headers()
|
|
}
|
|
r.headers.Del(key)
|
|
}
|
|
|
|
func (r *ProxyRequest) SetForm(values url.Values) error {
|
|
r.form = values
|
|
return nil
|
|
}
|
|
|
|
func (r *ProxyRequest) SetToForm(key, value string) error {
|
|
if r.form == nil {
|
|
form, err := r.BodyForm()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.form = form
|
|
}
|
|
r.form.Set(key, value)
|
|
return nil
|
|
}
|
|
|
|
func (r *ProxyRequest) AddForm(key, value string) error {
|
|
if r.form == nil {
|
|
form, err := r.BodyForm()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.form = form
|
|
}
|
|
r.form.Set(key, value)
|
|
return nil
|
|
}
|
|
|
|
func (r *ProxyRequest) AddFile(key string, file *http_service.FileHeader) error {
|
|
if r.form == nil {
|
|
file, err := r.Files()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.file = file
|
|
}
|
|
r.file[key] = file
|
|
return nil
|
|
}
|
|
|
|
func (r *ProxyRequest) SetRaw(contentType string, body []byte) {
|
|
r.contentType, r.body = contentType, body
|
|
}
|
|
|
|
func (r *ProxyRequest) TargetServer() string {
|
|
if r.uri == nil {
|
|
uri := r.URL()
|
|
r.uri = &uri
|
|
}
|
|
return r.uri.Host
|
|
}
|
|
|
|
func (r *ProxyRequest) TargetURL() string {
|
|
if r.uri == nil {
|
|
uri := r.URL()
|
|
r.uri = &uri
|
|
}
|
|
return r.uri.Path
|
|
}
|
|
|
|
func (r *ProxyRequest) SetMethod(s string) {
|
|
r.method = s
|
|
}
|
|
|
|
func (r *ProxyRequest) SetURL(url url.URL) {
|
|
r.uri = &url
|
|
}
|