|
@@ -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)
|
|
|
}
|
|
|
|