What are the errors you see on the server side when invoked with the Go client?
Regards, Chamila de Alwis Committer and PMC Member - Apache Stratos Senior Software Engineer | WSO2 Blog: https://medium.com/@chamilad On Mon, Aug 14, 2017 at 9:40 AM, Menuka Warushavithana <[email protected]> wrote: > Hi Roshan, > I'm not developing any APIs in this particular project. This is merely a > client side application that would utilize the existing Import/Export APIs. > GoLang was selected since it allows creating binaries hence executing > directly; sparing the use of any virtual runtime. > > Thanks > Menuka > > *Menuka Warushavithana* > *Software Engineering Intern* > *WSO2* > > *Moblie: + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77 > 6979690* > > > > On Mon, Aug 14, 2017 at 9:19 AM, roshan wijesena <[email protected]> > wrote: > >> Hello Menuka, >> >> It is Interesting to know why we have selected GoLang to develop this API >> rather JAVA? Will it work with a JVM OOTB with out installing any >> additional libs? >> >> Regards >> Roshan. >> >> On Mon, Aug 14, 2017 at 1:39 PM, Isuru Haththotuwa <[email protected]> >> wrote: >> >>> 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 <+94%2071%20635%208048>* <http://wso2.com/>* >>> >>> >>> >>> _______________________________________________ >>> Dev mailing list >>> [email protected] >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >> >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
