// ファイルを読み込んで返却 func readFile(filePath string, contentType string, w http.ResponseWriter, r *http.Request) { ConsoleLog.Info(fmt.Sprintf("ファイル転送 %s", filePath)) // ファイル読み込み data, err := ioutil.ReadFile(filePath) if err != nil { // 404返却 errMsg := fmt.Sprintf("ファイルの読み込みに失敗しました。%v", err) ConsoleLog.Error(errMsg) w.WriteHeader(404) fmt.Fprintf(w, errMsg) return } if len(contentType) > 0 { // コンテントタイプ指定がある場合は設定 w.Header().Set("Content-Type", contentType) ConsoleLog.Output(fmt.Sprintf("Content-Type %s", contentType)) } else { // ファイル名からタイプ設定 fileContentType := ContentType.GetContentType(filePath) w.Header().Set("Content-Type", fileContentType) ConsoleLog.Output(fmt.Sprintf("Content-Type %s", fileContentType)) } // ボディ情報設定 w.Write(data) ConsoleLog.Output(string(data)) }
// 出力 func Output(logType int, url string, logMsg []byte) { // 指定がない場合は何もしない if len(filePath) <= 0 { return } // 出力ファイル名設定 outputFile := time.Now().Format("2006.01.02_15.04.05") // URLより一番後ろのパスを設定する assigned := regexp.MustCompile("\\/([\\w.]*)([#?]+.*)*$") assignedGp := assigned.FindStringSubmatch(url) if assignedGp != nil && len(assignedGp) >= 2 { outputFile += "_" + assignedGp[1] } // switch logType { case LogTypeReqestHeader: outputFile += "_reqhed" case LogTypeReqestBody: outputFile += "_reqbody" case LogTypeResponseHeader: outputFile += "_reshed" case LogTypeResponseBody: outputFile += "_resbody" } outputFile += ".log" // ファイル出力 err := ioutil.WriteFile(path.Join(filePath, outputFile), logMsg, os.ModePerm) if err != nil { ConsoleLog.Error(fmt.Sprintf("ログファイルの出力に失敗しました。%v", err)) } }
// 送信 func (cl *HTTPClient) Send() bool { // メソッド、URL、ボディ部を設定 req, err := http.NewRequest(cl.RequestMethod, cl.RequestUrl, bytes.NewReader(cl.RequestBody)) if err != nil { ConsoleLog.Error(fmt.Sprintf("データの送信に失敗しました: %v", err)) return false } // ヘッダ情報を設定 for key, obj := range cl.RequestHeader { req.Header.Set(key, obj) } client := new(http.Client) resp, err := client.Do(req) if err != nil { ConsoleLog.Error(fmt.Sprintf("データの送信に失敗しました: %v", err)) return false } // ヘッダ情報取得 cl.ResponseHeaderBytes, _ = httputil.DumpResponse(resp, false) cl.ResponseHttpStatus = resp.StatusCode for key, _ := range resp.Header { cl.ResponseHeader[key] = resp.Header.Get(key) } // ボディ部取得 bodyData := new(bytes.Buffer) bodyData.ReadFrom(resp.Body) cl.ResponseBody = bodyData.Bytes() defer resp.Body.Close() return true }
// セットアップ func Setup(portNo int) bool { // ハンドラを登録してウェブページを表示させる http.HandleFunc("/", httpHandler) // ポート設定 portNoStr := strconv.Itoa(portNo) // スタート ConsoleLog.Info(fmt.Sprintf("Qstub起動 ポート番号: %s", portNoStr)) err := http.ListenAndServe(":"+portNoStr, nil) if err != nil { ConsoleLog.Error(fmt.Sprintf("Qstub起動エラー: %v", err)) return false } return true }
// 初期設定 func Setup(outputLogPath string) bool { // 退避 filePath = outputLogPath // 指定がない場合は何もしない if len(filePath) <= 0 { return true } // ディレクトリ作成 err := FileManager.CreateDir(filePath) if err != nil { ConsoleLog.Error(fmt.Sprintf("ディレクトリの作成に失敗しました。%v", err)) return false } ConsoleLog.Info(fmt.Sprintf("ログ出力先パス: %s", filePath)) return true }
// ファイル読込 func read() (map[string]string, bool) { // ファイル読み込み data, err := ioutil.ReadFile(filePath) if err != nil { ConsoleLog.Error(fmt.Sprintf("ContetTypeリストファイルの読み込みに失敗しました。%v", err)) return nil, false } var list map[string]string // JSONに変換 reader := strings.NewReader(string(data)) dec := json.NewDecoder(reader) dec.Decode(&list) // ログ出力 for key, obj := range list { ConsoleLog.Output(fmt.Sprintf("%s : %s", key, obj)) } return list, true }
// ファイル読込 func read() (*ConvertInfoEntity, bool) { // ファイル読み込み data, err := ioutil.ReadFile(filePath) if err != nil { ConsoleLog.Error(fmt.Sprintf("設定ファイルの読み込みに失敗しました。%v", err)) return nil, false } var entity ConvertInfoEntity // JSONに変換 reader := strings.NewReader(string(data)) dec := json.NewDecoder(reader) dec.Decode(&entity) // ログ出力 for _, obj := range entity.ConvertList { ConsoleLog.Output(fmt.Sprintf("%v", obj)) } return &entity, true }