コード例 #1
0
ファイル: HttpServer.go プロジェクト: momons/QStubServer
// ファイルを読み込んで返却
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))
}
コード例 #2
0
ファイル: HttpServer.go プロジェクト: momons/QStubServer
// 別サイトへ通信
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("レスポンス終了")

}
コード例 #3
0
ファイル: HttpServer.go プロジェクト: momons/QStubServer
// 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)
	}

}
コード例 #4
0
ファイル: ContentType.go プロジェクト: momons/QStubServer
// ファイル読込
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
}
コード例 #5
0
ファイル: ConvertInfo.go プロジェクト: momons/QStubServer
// ファイル読込
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
}