summaryrefslogtreecommitdiffstats
path: root/modules/httplib/httplib.go
diff options
context:
space:
mode:
authorUnknwon <joe2010xtmf@163.com>2014-11-18 15:13:08 -0500
committerUnknwon <joe2010xtmf@163.com>2014-11-18 15:13:08 -0500
commitce8d4cc80ba908022f0bbaf796b9025cfb68956e (patch)
tree32cee38f40a7ba70fb68c56db23d495cbf5fdfed /modules/httplib/httplib.go
parent37d8d3afe9ec589574c0cc6380a36fa93b1be8f2 (diff)
downloadgitea-ce8d4cc80ba908022f0bbaf796b9025cfb68956e.tar.gz
gitea-ce8d4cc80ba908022f0bbaf796b9025cfb68956e.zip
#634
Diffstat (limited to 'modules/httplib/httplib.go')
-rw-r--r--modules/httplib/httplib.go58
1 files changed, 30 insertions, 28 deletions
diff --git a/modules/httplib/httplib.go b/modules/httplib/httplib.go
index 5f592168dc..171dfe0139 100644
--- a/modules/httplib/httplib.go
+++ b/modules/httplib/httplib.go
@@ -5,7 +5,7 @@
package httplib
-// NOTE: last sync c07b1d8 on Aug 23, 2014.
+// NOTE: last sync 57e62e5 on Oct 29, 2014.
import (
"bytes"
@@ -14,6 +14,7 @@ import (
"encoding/xml"
"io"
"io/ioutil"
+ "log"
"mime/multipart"
"net"
"net/http"
@@ -252,35 +253,36 @@ func (b *BeegoHttpRequest) getResponse() (*http.Response, error) {
} else {
b.url = b.url + "?" + paramBody
}
- } else if b.req.Method == "POST" && b.req.Body == nil && len(paramBody) > 0 {
+ } else if b.req.Method == "POST" && b.req.Body == nil {
if len(b.files) > 0 {
- bodyBuf := &bytes.Buffer{}
- bodyWriter := multipart.NewWriter(bodyBuf)
- for formname, filename := range b.files {
- fileWriter, err := bodyWriter.CreateFormFile(formname, filename)
- if err != nil {
- return nil, err
+ pr, pw := io.Pipe()
+ bodyWriter := multipart.NewWriter(pw)
+ go func() {
+ for formname, filename := range b.files {
+ fileWriter, err := bodyWriter.CreateFormFile(formname, filename)
+ if err != nil {
+ log.Fatal(err)
+ }
+ fh, err := os.Open(filename)
+ if err != nil {
+ log.Fatal(err)
+ }
+ //iocopy
+ _, err = io.Copy(fileWriter, fh)
+ fh.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
}
- fh, err := os.Open(filename)
- if err != nil {
- return nil, err
+ for k, v := range b.params {
+ bodyWriter.WriteField(k, v)
}
- //iocopy
- _, err = io.Copy(fileWriter, fh)
- fh.Close()
- if err != nil {
- return nil, err
- }
- }
- for k, v := range b.params {
- bodyWriter.WriteField(k, v)
- }
- contentType := bodyWriter.FormDataContentType()
- bodyWriter.Close()
- b.Header("Content-Type", contentType)
- b.req.Body = ioutil.NopCloser(bodyBuf)
- b.req.ContentLength = int64(bodyBuf.Len())
- } else {
+ bodyWriter.Close()
+ pw.Close()
+ }()
+ b.Header("Content-Type", bodyWriter.FormDataContentType())
+ b.req.Body = ioutil.NopCloser(pr)
+ } else if len(paramBody) > 0 {
b.Header("Content-Type", "application/x-www-form-urlencoded")
b.Body(paramBody)
}
@@ -332,7 +334,7 @@ func (b *BeegoHttpRequest) getResponse() (*http.Response, error) {
Jar: jar,
}
- if b.setting.UserAgent != "" {
+ if len(b.setting.UserAgent) > 0 && len(b.req.Header.Get("User-Agent")) == 0 {
b.req.Header.Set("User-Agent", b.setting.UserAgent)
}