猿问

将 curl 请求转换为 Golang

所以这个对 paypal 支付 API 的 curl 请求有效:


curl --silent -v 'https://api.sandbox.paypal.com/v1/oauth2/token' \

   -H "Accept: application/json" \

   -H "Accept-Language: en_US" \

   -u "${client_id}:${client_secret}" \

   -d "grant_type=client_credentials"

我感到困惑的一件事是:该-d选项适用于 HTTP 请求正文中的数据 - -d 选项是否使其成为 POST 请求,还是 curl 请求高于带有正文的 GET 请求?我猜是后者,但我不确定curl --help.


在golang我有:


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

)


const (

    PayPalTestClientID = "Aeit5RskDRN8eUUMB0Ud3RjA_z6feWMUHktwlJZMeQMo9A9ulbKK"

    PayPalTestSecret   = "EAAqyzrOTUWf-OFJCB4BxgXT4xuravL7pnkC8Tn20HYtZExd1mFO"

)


func main() {


    //reader := bytes.NewBuffer()

    req, err := http.NewRequest("GET", "https://api.sandbox.paypal.com/v1/oauth2/token", nil)


    if err != nil {

        log.Fatal(err)

    }


    req.Header.Set("Accept", "application/json")

    req.Header.Set("Accept-Language", "en_US")

    req.Header.Set("Authorization", fmt.Sprintf("Basic %s:%s", PayPalTestClientID, PayPalTestSecret))


    client := &http.Client{}

    resp, err := client.Do(req)


    if err != nil {

        log.Fatal(err)

    }


    defer resp.Body.Close()


    body, err := ioutil.ReadAll(resp.Body)


    if err != nil {

        log.Fatal(err)

    }


    var v interface{}

    err = json.Unmarshal(body, &v);


    if err != nil {

        log.Fatal(err)

    }


    log.Print(v)

}

客户/秘密被混淆了,所以他们不会像上面写的那样工作。但是使用我得到的真实信用:


2020/01/31 16:05:07 map[error:invalid_client error_description:Client Authentication failed]


真正的信用确实可以使用 curl 命令。


Helenr
浏览 375回答 1
1回答

皈依舞

注意:提供的凭据有效吗?因为我收到了一个sonorus 401 Authentication Failed,。注意:使用-dincURL,您将发送POST请求而不是GET. 由于这种行为,您可能想要发送POST请求而不是GET你可以使用我的小 http 库:https ://github.com/alessiosavi/Requests/package mainimport requests "github.com/alessiosavi/Requests"func main() {    req, err := requests.InitRequest("https://postman-echo.com/basic-auth", "GET", []byte{}, false, false)    if err != nil {        fmt.Println("ERROR! ", err)    }    req.CreateHeaderList("Accept", "application/json", "Accept-Language", "en_US", "Authorization", "postman:password")    client := &http.Client{}    resp := req.ExecuteRequest(client)    fmt.Println(resp.Dump())}您可以使用对服务进行身份验证所需的数据(URL、发布数据、标头)来更改数据。在您的情况下,将是这样的:package mainimport requests "github.com/alessiosavi/Requests"const (    ID= "Aeit5RskDRN8eUUMB0Ud3RjA_z6feWMUHktwlJZMeQMo9A9ulbKK"    SECRET= "EAAqyzrOTUWf-OFJCB4BxgXT4xuravL7pnkC8Tn20HYtZExd1mFO")func main() {    req, err := requests.InitRequest("https://api.sandbox.paypal.com/v1/oauth2/token", "GET", []byte{"grant_type=client_credentials"}, false, false)    if err != nil {        fmt.Println("ERROR! ", err)    }    req.CreateHeaderList("Accept", "application/json", "Accept-Language", "en_US", "Authorization", ID+":"+SECRET)    client := &http.Client{}    resp := req.ExecuteRequest(client)    fmt.Println(resp.Dump())}
随时随地看视频慕课网APP

相关分类

Go
我要回答