Just to clarify, is this working with POST? On Mon, Aug 14, 2017 at 9:01 AM, Isuru Haththotuwa <[email protected]> wrote:
> The best way to figure out this would be to debug the MSF4J layer. > > @Thusitha/Chanaka: Can you please give some input on where to start > debugging for this particular case? > > On Sun, Aug 13, 2017 at 12:54 PM, Menuka Warushavithana <[email protected]> > wrote: > >> Hi, >> I'm working on creating a CLI tool for importing and exporting APIs >> between different environments (for WSO2 API Manager 3.0.0) using Golang. >> >> I have an issue with importing APIs. >> The following curl command works fine. >> *`curl -k -F "[email protected]" -X PUT -H "Authorization: Bearer >> <access_token>" https://localhost:9292/api/am/publisher/v1.0/import/apis >> <https://localhost:9292/api/am/publisher/v1.0/import/apis>`* >> >> The problem is with mapping this to Go code. >> Here's what I wrote at first. >> >> func main() { >> data, err := os.Open("./exported.zip") >> accessToken := "<access_token>" >> if err != nil { >> fmt.Println("Error oening file") >> panic(err) >> } >> >> req, reqErr := http.NewRequest(http.MethodPut, " >> https://localhost:9292/api/am/publisher/v1.0/import/apis", data) >> if reqErr != nil { >> fmt.Println("Error creating request") >> panic(reqErr) >> } >> >> req.Header.Add("Content-Type", "multipart/form-data") // response is >> 500 with or without this line >> req.Header.Add("Authorization", "Bearer "+accessToken) >> >> tr := &http.Transport{ >> TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for >> skipping errors in https >> } >> >> client := &http.Client{Transport: tr} >> res, resErr := client.Do(req) >> >> if resErr != nil { >> fmt.Println("Error in response") >> panic(resErr) >> } >> >> body, err := ioutil.ReadAll(res.Body) >> >> fmt.Println("Response:", res) >> fmt.Println("Body:", string(body)) >> fmt.Println("Status:", res.Status) >> >> defer res.Body.Close() >> } >> >> This returns a *500 Internal Server Error.* >> >> But the request works fine with *Postman* client. Therefore, I tried >> putting the extra headers generated by Postman in Go code. >> >> func main() { >> url := "https://localhost:9292/api/am/publisher/v1.0" >> accessToken := "<access_token>" >> >> payload := strings.NewReader("------WebKi >> tFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; >> name=\"file\"; filename=\"./exported.zip\"\r\nContent-Type: >> application/zip\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--") >> >> req, _ := http.NewRequest(http.MethodPut, url, payload) >> >> req.Header.Add("content-type", "multipart/form-data; >> boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW") >> req.Header.Add("authorization", "Bearer "+accessToken) >> req.Header.Add("cache-control", "no-cache") >> >> tr := &http.Transport{ >> TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for >> skipping errors in https >> } >> >> client := &http.Client{Transport: tr} >> resp, _ := client.Do(req) >> >> if resp != nil { >> >> body, _ := ioutil.ReadAll(resp.Body) >> >> fmt.Println(resp) >> fmt.Println(string(body)) >> } else { >> fmt.Println("Null Response") >> } >> >> fmt.Println(resp.Status) >> } >> >> This returns a *405 - Method Not Allowed* >> >> So, Postman works. Curl works. Go does not. >> I googled on 'multipart/form-data' under HTTP, but that didn't help >> either. >> >> Your advice is much appreciated in solving this issue. >> >> Thanks and Regards >> >> *Menuka Warushavithana* >> *Software Engineering Intern* >> *WSO2* >> >> *Moblie: + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77 >> 6979690 <077%20697%209690>* >> >> >> > > > -- > Thanks and Regards, > > Isuru H. > +94 716 358 048 <071%20635%208048>* <http://wso2.com/>* > > > -- Thanks and Regards, Isuru H. +94 716 358 048* <http://wso2.com/>*
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
