为了账号安全,请及时绑定邮箱和手机立即绑定

将 curl 请求转换为 Golang

将 curl 请求转换为 Golang

Go
Helenr 2022-05-10 17:06:43
所以这个对 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 mainimport (    "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 命令。
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

注意:提供的凭据有效吗?因为我收到了一个sonorus 401 Authentication Failed,。


注意:使用-dincURL,您将发送POST请求而不是GET. 由于这种行为,您可能想要发送POST请求而不是GET


你可以使用我的小 http 库:https ://github.com/alessiosavi/Requests/


package main


import 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 main


import 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())

}


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 374 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号