Guest User

Untitled

a guest
Jul 23rd, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "net/http/cgi"
  9. "net/http/httputil"
  10. "net/url"
  11. "os"
  12. "path/filepath"
  13. "strings"
  14. )
  15.  
  16. func main() {
  17. f, err := os.OpenFile(LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
  18. if err != nil {
  19. fmt.Println(err)
  20. }
  21.  
  22. defer f.Close()
  23. log.SetOutput(f)
  24. if err := cgi.Serve(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  25.  
  26. // ヘッダをセット
  27. header := w.Header()
  28. header.Set("Content-Type", "text/html; charset=utf-8")
  29.  
  30. // パスを取得
  31. proxyPath := r.FormValue("proxyPath")
  32. if !filepath.IsAbs(proxyPath) {
  33. fmt.Fprintf(w, "Invalid request")
  34. return
  35. }
  36. formValue := r.Form
  37.  
  38. // パスをQueryStringから消去
  39. formValue.Del("proxyPath")
  40.  
  41. address, err := loadAddress(r.URL.Path)
  42. if err != nil {
  43. log.Fatalln(err)
  44. }
  45.  
  46. target, err := url.Parse(address)
  47. if err != nil {
  48. log.Fatalln(err)
  49. }
  50. r.URL, err = url.Parse(address + proxyPath + "?" + formValue.Encode())
  51. if err != nil {
  52. log.Fatalln(err)
  53. }
  54. proxy := httputil.NewSingleHostReverseProxy(target)
  55. proxy.ServeHTTP(w, r)
  56. })); err != nil {
  57. log.Fatalln(err)
  58. }
  59. }
  60.  
  61. <!DOCTYPE html>
  62. <html>
  63. <head>
  64. <title>画像アップロードテスト</title>
  65. <meta charset="utf-8">
  66. </head>
  67. <body>
  68. <form method="post" action="/rev-proxy/?proxyPath=/upload" enctype="multipart/form-data">
  69. <input type="file" name="file">
  70. <input type="submit" value="送信">
  71. </form>
  72. </body>
  73. </html>
Add Comment
Please, Sign In to add comment