【发布时间】:2021-08-05 15:33:28
【问题描述】:
我正在使用 rails 5 从 go 脚本获取发布请求,我有一条发布到我的函数的路线。
在 go 脚本中,我正在使用此代码进行发布请求并发送数据:
request, err := http.NewRequestWithContext(ctx, post, url, bytes.NewBuffer(data))
resp, err := client.Do(request)
在rails中,我使用这段代码来获取post请求的参数
params = params.permit!.except(:controller, :action).to_h
当我从 go 发出请求时,参数是空的 {}。
但我可以通过在 rails 中查看请求原始正文中的数据:
puts request.raw_post
在铁路上:
request.headers["Content-Type"]:
"text/plain; charset=utf-8"
Go 中的数据:
data, err := json.Marshal(jsonData)
【问题讨论】:
-
您是否在请求中提供了正确的
ContentType标头?你能给我们一个请求正文和标头的示例吗? -
我已经在 go 中添加了这个:request.Header.Set("Content-Type", http.DetectContentType(data))
-
这是否为您提供了 Rails 方面的预期内容类型?您可以通过
request.headers获取标题。我猜是不匹配,所以 rack 没有反序列化请求正文。 -
在 rails, request.headers["Content-Type"]: "text/plain; charset=utf-8" 数据在 go : data, err := json.Marshal(jsonData)跨度>
-
那是你的问题。您需要发送
application/json。我真的不知道去,但你不能只做request.Header.Set("Content-Type", "application/json"),因为你真的知道你应该发送什么吗?
标签: ruby-on-rails go ruby-on-rails-5 http-post