12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package resource
- import (
- "context"
- "errors"
- "io"
- "net/http"
- "os"
- "time"
- mihomoHttp "github.com/metacubex/mihomo/component/http"
- types "github.com/metacubex/mihomo/constant/provider"
- )
- type FileVehicle struct {
- path string
- }
- func (f *FileVehicle) Type() types.VehicleType {
- return types.File
- }
- func (f *FileVehicle) Path() string {
- return f.path
- }
- func (f *FileVehicle) Read() ([]byte, error) {
- return os.ReadFile(f.path)
- }
- func (f *FileVehicle) Proxy() string {
- return ""
- }
- func NewFileVehicle(path string) *FileVehicle {
- return &FileVehicle{path: path}
- }
- type HTTPVehicle struct {
- url string
- path string
- proxy string
- header http.Header
- }
- func (h *HTTPVehicle) Url() string {
- return h.url
- }
- func (h *HTTPVehicle) Type() types.VehicleType {
- return types.HTTP
- }
- func (h *HTTPVehicle) Path() string {
- return h.path
- }
- func (h *HTTPVehicle) Proxy() string {
- return h.proxy
- }
- func (h *HTTPVehicle) Read() ([]byte, error) {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
- defer cancel()
- resp, err := mihomoHttp.HttpRequestWithProxy(ctx, h.url, http.MethodGet, h.header, nil, h.proxy)
- if err != nil {
- return nil, err
- }
- defer resp.Body.Close()
- if resp.StatusCode < 200 || resp.StatusCode > 299 {
- return nil, errors.New(resp.Status)
- }
- buf, err := io.ReadAll(resp.Body)
- if err != nil {
- return nil, err
- }
- return buf, nil
- }
- func NewHTTPVehicle(url string, path string, proxy string, header http.Header) *HTTPVehicle {
- return &HTTPVehicle{url, path, proxy, header}
- }
|