120 lines
2.9 KiB
Go
120 lines
2.9 KiB
Go
package starainrt
|
||
|
||
import (
|
||
"bytes"
|
||
"database/sql"
|
||
"io/ioutil"
|
||
"net"
|
||
"net/http"
|
||
"os"
|
||
"time"
|
||
)
|
||
|
||
var HttpNul, HttpNul2 map[string]string
|
||
var HttpTimeOut int64 = 15
|
||
var DBRes *sql.DB
|
||
var DBRows *sql.Rows
|
||
var ShellRes, ShellErr string
|
||
var ShellExit bool
|
||
|
||
//Exits返回指定文件夹/文件是否存在
|
||
func Exists(filepath string) bool {
|
||
_, err := os.Stat(filepath)
|
||
if err != nil && os.IsNotExist(err) {
|
||
return false
|
||
}
|
||
return true
|
||
}
|
||
|
||
//IsFile返回给定文件地址是否是一个文件,
|
||
//True为是一个文件,False为不是文件或路径无效
|
||
func IsFile(fpath string) bool {
|
||
s, err := os.Stat(fpath)
|
||
if err != nil {
|
||
return false
|
||
}
|
||
return !s.IsDir()
|
||
}
|
||
|
||
//IsFolder返回给定文件地址是否是一个文件夹,
|
||
//True为是一个文件夹,False为不是文件夹或路径无效
|
||
func IsFolder(fpath string) bool {
|
||
s, err := os.Stat(fpath)
|
||
if err != nil {
|
||
return false
|
||
}
|
||
return s.IsDir()
|
||
}
|
||
|
||
//CurlGet发起一个HTTP GET请求
|
||
func CurlGet(url string) (error, []byte) {
|
||
err, _, res, _, _ := Curl(url, "", HttpNul, HttpNul2, "GET")
|
||
return err, res
|
||
}
|
||
|
||
//CurlPost发起一个基于表单的HTTP Post请求
|
||
func CurlPost(url, postdata string) (error, []byte) {
|
||
err, _, res, _, _ := Curl(url, postdata, HttpNul, HttpNul2, "POST")
|
||
return err, res
|
||
}
|
||
|
||
//HttpNulReset将重置Header和Cookie为空
|
||
func HttpNulReset() {
|
||
var tmp map[string]string
|
||
HttpNul, HttpNul2 = tmp, tmp
|
||
}
|
||
|
||
func Curl(url string, postdata string, header map[string]string, cookie map[string]string, method string) (error, int, []byte, http.Header, []*http.Cookie) {
|
||
var req *http.Request
|
||
if method == "" {
|
||
if len(postdata) != 0 {
|
||
method = "POST"
|
||
} else {
|
||
method = "GET"
|
||
}
|
||
}
|
||
BytePostData := []byte(postdata)
|
||
if postdata == "" || len(postdata) == 0 {
|
||
req, _ = http.NewRequest(method, url, nil)
|
||
} else {
|
||
req, _ = http.NewRequest(method, url, bytes.NewBuffer(BytePostData))
|
||
}
|
||
|
||
if (len(header) == 0 || header == nil) && method == "POST" {
|
||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||
}
|
||
for k, v := range header {
|
||
req.Header.Set(k, v)
|
||
}
|
||
if len(cookie) != 0 {
|
||
for k, v := range cookie {
|
||
req.AddCookie(&http.Cookie{Name: k, Value: v, HttpOnly: true})
|
||
}
|
||
|
||
}
|
||
client := &http.Client{
|
||
Transport: &http.Transport{
|
||
Dial: func(netw, addr string) (net.Conn, error) {
|
||
deadline := time.Now().Add(time.Duration(HttpTimeOut) * time.Second)
|
||
c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(HttpTimeOut))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
c.SetDeadline(deadline)
|
||
return c, nil
|
||
},
|
||
}}
|
||
resp, err := client.Do(req)
|
||
var rte []*http.Cookie
|
||
if err != nil {
|
||
return err, 0, []byte(""), req.Header, rte
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
statuscode := resp.StatusCode
|
||
hea := resp.Header
|
||
body, _ := ioutil.ReadAll(resp.Body)
|
||
return nil, statuscode, body, hea, resp.Cookies()
|
||
|
||
}
|