我正在try 通过HTTP POST在JSON中发送GooglePay令牌.该请求在cURL和Postman上运行良好,但当我try Go HTTP请求时,服务器报告数据的格式无效,并且HTTP响应状态代码为400.

cURL

curl --verbose --location 'https://fts-uat.cardconnect.com/cardsecure/api/v1/ccn/tokenize' \
    --header 'Content-Type: application/json' \
    --data '{
    "encryptionhandler": "EC_GOOGLE_PAY",
    "devicedata": "{\"signature\":\"MEQCIDTsnaYiwckYQFYky0i0wSn317HcKuAYrNYfh4Uw6Y4lAiAhDPxmheYFOEDGVYjVjZnPFHOrbYHwDUbkcYIxZDqU/w\\u003d\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYD8gO936PEY6yEFDQolKLMcpKvjo1uZEdnKZ022tUOAERQKaEpoT6RAd6nDm1FbbFRUdionunr3vy/o72nSQ6w\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1701182324996\\\"}\",\"signatures\":[\"MEUCIQCbEHBbAXI/WEfguCnTkYYwgQeFZcN4/oBS8O79oQGl4wIgOmXKIihg6Ia9b7bUJckKAGrPF70fHZjCJcPGv88MMjA\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"ynexar8PqRG3y1zKbNBUbbwRHbAbElnk2imema+8Zx89ex91/pgdy5ZzZKNhJ+LHJonuQKvdI9h0gWikhap7Jp6kqrnu0b4OzMxrRoj5wteUzDmm77F7WsBxi2DkIsqzcReDBZiTO3BSrJwvIkeL8mYr2yfVTZ0qY3KqCqXkzx0ANT3mZEdltqSEGOKaJKV38S1Oq0vGzQCKLxFI7Cxz5RHlTIM0WfBUigALfa+yJO4J6Tev0d4e9CYChz5DA/sBKxPf37796IxmvxxvNpytVqXYHKQWg6iAVfeKs8wbR6KA12mb6zqwTOrrLBrnLWdaBbX12flyvPFVywSJFHzTkV8WEB9mVoKrm/A2b27UV8RGFNrr9djCE1FZIgyS36VJVefLKlWQkeSGNESuLn0d7ftkv92+Gds2Hl9TQbAyy+IcGVERmQPo2EOhxf1xOpSQU8bTxLIFr+WqzGM0Q1+PquqxzQ\\\\u003d\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BMAjXpWcm+kQlvIMzdhAnOJK+5RViyCaPA35gXTJGvW5pKZ6zDxD14cQYHfhccJZli24Fc+JbqnvIvtc6Yo19d8\\\\u003d\\\",\\\"tag\\\":\\\"3ZumWWU6hOw+f5V5GIKr6di4AkA0s3kzigqP3V1YzVo\\\\u003d\\\"}\"}"
}'

Go Lang

    url := "https://fts-uat.cardconnect.com/cardsecure/api/v1/ccn/tokenize"

    data := `{
        "encryptionhandler": "EC_GOOGLE_PAY",
        "devicedata": "{\"signature\":\"MEQCIDTsnaYiwckYQFYky0i0wSn317HcKuAYrNYfh4Uw6Y4lAiAhDPxmheYFOEDGVYjVjZnPFHOrbYHwDUbkcYIxZDqU/w\\u003d\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYD8gO936PEY6yEFDQolKLMcpKvjo1uZEdnKZ022tUOAERQKaEpoT6RAd6nDm1FbbFRUdionunr3vy/o72nSQ6w\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1701182324996\\\"}\",\"signatures\":[\"MEUCIQCbEHBbAXI/WEfguCnTkYYwgQeFZcN4/oBS8O79oQGl4wIgOmXKIihg6Ia9b7bUJckKAGrPF70fHZjCJcPGv88MMjA\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"ynexar8PqRG3y1zKbNBUbbwRHbAbElnk2imema+8Zx89ex91/pgdy5ZzZKNhJ+LHJonuQKvdI9h0gWikhap7Jp6kqrnu0b4OzMxrRoj5wteUzDmm77F7WsBxi2DkIsqzcReDBZiTO3BSrJwvIkeL8mYr2yfVTZ0qY3KqCqXkzx0ANT3mZEdltqSEGOKaJKV38S1Oq0vGzQCKLxFI7Cxz5RHlTIM0WfBUigALfa+yJO4J6Tev0d4e9CYChz5DA/sBKxPf37796IxmvxxvNpytVqXYHKQWg6iAVfeKs8wbR6KA12mb6zqwTOrrLBrnLWdaBbX12flyvPFVywSJFHzTkV8WEB9mVoKrm/A2b27UV8RGFNrr9djCE1FZIgyS36VJVefLKlWQkeSGNESuLn0d7ftkv92+Gds2Hl9TQbAyy+IcGVERmQPo2EOhxf1xOpSQU8bTxLIFr+WqzGM0Q1+PquqxzQ\\\\u003d\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BMAjXpWcm+kQlvIMzdhAnOJK+5RViyCaPA35gXTJGvW5pKZ6zDxD14cQYHfhccJZli24Fc+JbqnvIvtc6Yo19d8\\\\u003d\\\",\\\"tag\\\":\\\"3ZumWWU6hOw+f5V5GIKr6di4AkA0s3kzigqP3V1YzVo\\\\u003d\\\"}\"}"
    }`

    req, _ := http.NewRequest(http.MethodPost, url, strings.NewReader(data))
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    fmt.Println("Response Status:", resp.Status)

我try 使用NC打印来自curl、Postman和GoLang的所有HTTP头和正文,它们看起来完全相同.我也操纵了User-Agent保持一致,但还没有运气.感谢任何人的帮助.

推荐答案

简短的回答

添加以下内容:

req.ContentLength = 0

长长的答案

天知道是什么原因,服务器只接受Transfer-Encoding: chunked.因此,当您发送"正常"请求时,它看起来是这样的,并且 失败:

POST /cardsecure/api/v1/ccn/tokenize HTTP/1.1
Host: fts-uat.cardconnect.com
Content-Length: 1373

当你添加上面的代码时,它看起来像这样,并传递:

POST /cardsecure/api/v1/ccn/tokenize HTTP/1.1
Host: fts-uat.cardconnect.com
Transfer-Encoding: chunked

Go相关问答推荐

在字符串与字符串子切片上使用len进行位转移产生意外输出

Golang SDK for DynamoDB:ReturnValuesOnConditionCheckFailure在条件chcek失败发生时不返回条件的详细信息

这是go语言gin提供的关于TypeEngine和RouterGroup的问题

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

死锁 - 所有 goroutine 都处于睡眠状态(即使使用等待组)

是否需要手动调用rand.Seed?

Go - 永远停止带有上下文的循环

如何使用gosdk在Dynamodb中进行UpdateItem时,将ValueBuilder对象声明为StringSet类型?

函数实现接口时的模式名称是什么?

go-echo中如何防止+转义

使用 go.work 文件在多个测试文件上运行 go test 命令

如何在golang中按字符a对字符串数组进行排序

如何将一片十六进制字节转换为整数

如何使用 Go 获取 X11 中的窗口列表

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

使用 bolthold 3 条件进行 boltDB 查询

HTTP 重定向不呈现新页面

Go/Golang:如何从 big.Float 中提取最低有效数字?

如何迭代在泛型函数中传递的片的并集?

Golang 查询扫描未将查询正确扫描到 struct 中