|
|
package jsruntime
import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "os" "os/exec" "path/filepath" "strings" "time" )
func (jr *JsRuntime) EnableRequestFunc() { jr.runtime.Set("GoRequest", func(call map[string]interface{}) (respData string) {
url := "" if call["url"] != nil { url = call["url"].(string) }
data := "" if call["data"] != nil { data = call["data"].(string) }
header := map[string]interface{}{} if call["header"] != nil { header = call["header"].(map[string]interface{}) }
timeout := 0 if call["timeout"] != nil { switch call["timeout"].(type) { case int64: timeout = int(call["timeout"].(int64)) case int: timeout = call["timeout"].(int) } }
method := "GET" if call["method"] != nil { method = call["method"].(string) }
client := &http.Client{ Timeout: time.Millisecond * time.Duration(timeout), }
var contentReader *bytes.Reader contentReader = bytes.NewReader([]byte(data))
//log.Println(method, url, data)
req, err := http.NewRequest(method, url, contentReader) if err != nil { rs, _ := json.Marshal(map[string]interface{}{ "statusCode": 504, "data": err.Error(), }) return string(rs) }
for e := range header { req.Header.Set(e, header[e].(string)) }
resp, err := client.Do(req)
var statusCode int var respDatas string
if err == nil { defer resp.Body.Close() statusCode = resp.StatusCode rb, _ := ioutil.ReadAll(resp.Body) respDatas = string(rb) } else { statusCode = 502 respDatas = err.Error() }
log2File("netword", "-------------------------------------------------") log2File("netword", "网络请求:", method, url) headerStr, _ := json.Marshal(header) log2File("netword", "网络请求头:", string(headerStr)) log2File("netword", "网络请求发送数据:", data) log2File("netword", "请求返回状态:", err == nil) log2File("netword", "请求返回状态码:", statusCode) log2File("netword", "请求返回:", respDatas) log2File("netword", "-------------------------------------------------")
rs, _ := json.Marshal(map[string]interface{}{ "statusCode": statusCode, "data": string(respDatas), }) return string(rs) }) }
func log2File(tag string, strs ...interface{}) { str := fmt.Sprintln(strs...) path := filepath.Join(getSelfFilePath(), fmt.Sprintf("jsruntime-%s.log", tag)) if pathExists(path) { raw, _ := ioutil.ReadFile(path) str = string(raw) + str } ioutil.WriteFile(path, []byte(str), 0644) }
func pathExists(path string) bool { _, err := os.Stat(path) if err == nil { return true } if os.IsNotExist(err) { return false } return false }
var selfFilePath string
func getSelfFilePath() string { if selfFilePath == "" { file, err := exec.LookPath(os.Args[0]) if err != nil { return "" } path, err := filepath.Abs(file) if err != nil { return "" } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "" } selfFilePath, _ = filepath.Abs(string(path[0 : i+1])) } return selfFilePath }
|