8

With golang code I have to transfer file to remote service using their API. Their requirement is that request MUST NOT use multipart/form-data. I tried this curl command:

curl -i -X PUT -F [email protected] -H "Content-Type: text/plain"  https://url.of.endpoint.com

it doesn't work since it simulates form, but this command:

curl -i -X PUT -T text.txt -H "Content-Type: text/plain"  https://url.of.endpoint.com

works perfectly.

How can I translate this curl command to golang code?

2 Answers 2

12

You have to create a "PUT" request and set its request body to the contents of the file:

package main

import (
    "log"
    "net/http"
    "os"
)

func main() {
    data, err := os.Open("text.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer data.Close()
    req, err := http.NewRequest("PUT", "http://localhost:8080/test.txt", data)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Content-Type", "text/plain")

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer res.Body.Close()
}
Sign up to request clarification or add additional context in comments.

1 Comment

How would one read/access the file on the endpoint, "localhost:8080", in this case? Following code returns nil rdr,_ := os.Open("test.txt") req,_ := http.ReadRequest(bufio.NewReader(rdr)) fmt.Printf("%+v\n", req)
2

It would be like this:

package main

import (
    "fmt"
    "net/http"
    "net/http/httputil"
    "os"
)

func main() {
    // Open a file.
    f, err := os.Open("text.txt")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    // Post a file to URL.
    resp, err := http.Post("https://url.of.endpoint.com", "text/plain", f)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    // Dump response to debug.
    b, err := httputil.DumpResponse(resp, true)
    if err != nil {
        panic(err)
    }
    fmt.Println(b)
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.