Beispiel #1
0
// ファイルを読み込んで返却
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))
}
Beispiel #2
0
// 別サイトへ通信
func connectOtherSite(url string, contentType string, w http.ResponseWriter, r *http.Request) {

	httpClient := HttpClient.Init()
	httpClient.RequestMethod = r.Method
	httpClient.RequestUrl = url

	ConsoleLog.Info("転送リクエスト開始")
	// リクエストヘッダ設定
	ConsoleLog.Output(fmt.Sprintf("%s %s", r.Proto, r.Method))
	for key, _ := range r.Header {
		httpClient.RequestHeader[key] = r.Header.Get(key)
		ConsoleLog.Output(fmt.Sprintf("%s : %s", key, r.Header.Get(key)))
	}

	// リクエストボディ
	httpClient.RequestBody = reqestBodyBytes

	ConsoleLog.Output("\n" + string(reqestBodyBytes))

	// コンテントタイプ指定がある場合は設定
	if len(contentType) > 0 {
		contentTypeBk := httpClient.RequestHeader["Content-Type"]
		httpClient.RequestHeader["Content-Type"] = contentType
		ConsoleLog.Info(fmt.Sprintf("Content-Type変更 %s → %s", contentTypeBk, contentType))
	}

	ConsoleLog.Info("転送リクエスト終了")

	// リクエスト送信&レスポンス受信
	httpClient.Send()

	// ヘッダ情報設定
	w.WriteHeader(httpClient.ResponseHttpStatus)
	for key, obj := range httpClient.ResponseHeader {
		w.Header().Set(key, obj)
	}

	// ボディ情報設定
	w.Write(httpClient.ResponseBody)

	// レスポンスログ出力
	outputResponse(r.URL.String(), httpClient.ResponseHeaderBytes, httpClient.ResponseBody)
	ConsoleLog.Info("レスポンス開始")
	ConsoleLog.Output(string(httpClient.ResponseHeaderBytes) + string(httpClient.ResponseBody))
	ConsoleLog.Info("レスポンス終了")

}
Beispiel #3
0
// HTTPハンドラ
func httpHandler(w http.ResponseWriter, r *http.Request) {

	ConsoleLog.InfoStrong(fmt.Sprintf("リクエスト受信: %s             ", r.URL.String()))

	// ヘッダ部取得
	reqestHeaderBytes, _ = httputil.DumpRequest(r, false)

	// ボディ部読み込み
	bodyData := new(bytes.Buffer)
	bodyData.ReadFrom(r.Body)
	reqestBodyBytes = bodyData.Bytes()
	defer r.Body.Close()

	// ログ出力
	outputReqest(r.URL.String(), reqestHeaderBytes, reqestBodyBytes)
	ConsoleLog.Info("リクエスト受信開始")
	ConsoleLog.Output(string(reqestHeaderBytes) + string(reqestBodyBytes))
	ConsoleLog.Info("リクエスト受信終了")

	// 該当のURLがあるかを検索
	convertEntity, replaseStr := ConvertInfo.SearchURL(r.URL.String(), string(reqestHeaderBytes), string(reqestBodyBytes))
	if convertEntity == nil {
		// 情報返却
		errMsg := fmt.Sprintf("該当のURLに対する設定が見つかりません。%s", r.URL.String())
		ConsoleLog.Warning(errMsg)
		w.WriteHeader(404)
		fmt.Fprintf(w, errMsg)
		return
	}

	if len(convertEntity.DestURL) > 0 {
		// 別のサイトへ通信
		connectOtherSite(replaseStr, convertEntity.ContentType, w, r)
	} else {
		// ローカルアクセス
		readFile(replaseStr, convertEntity.ContentType, w, r)
	}

}
Beispiel #4
0
// セットアップ
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
}
Beispiel #5
0
// 初期設定
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
}
Beispiel #6
0
// 初期設定
func Setup(contentTypeFilePath string) bool {

	// 退避
	filePath = contentTypeFilePath

	// ファイルパスがなかったら
	if len(filePath) <= 0 {
		// カレントディレクトリ取得
		curDir, _ := os.Getwd()
		filePath = curDir + "/ContentTypeList.json"
	}

	// ファイルパスを出力
	ConsoleLog.Info(fmt.Sprintf("ContetTypeリストファイルパス: %s", filePath))

	// ファイル読み込み
	var isSuccess bool
	ContentTypeList, isSuccess = read()
	if !isSuccess {
		return false
	}

	return true
}
Beispiel #7
0
// 初期設定
func Setup(settingFilePath string) bool {

	// 退避
	filePath = settingFilePath

	// ファイルパスがなかったら
	if len(filePath) <= 0 {
		// カレントディレクトリ取得
		curDir, _ := os.Getwd()
		filePath = curDir + "/Setting.json"
	}

	// ファイルパスを出力
	ConsoleLog.Info(fmt.Sprintf("設定ファイルパス: %s", filePath))

	// ファイル読み込み
	var isSuccess bool
	ConvertInfo, isSuccess = read()
	if !isSuccess {
		return false
	}

	return true
}