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

Reply via email to