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("------WebKitFormBoundary7MA4YWxkTrZu0gW\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* <http://wso2.com/>*
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
