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