gpt4 book ai didi

ruby-on-rails - 通过 Ruby 的 HTTP post 请求

转载 作者:数据小太阳 更新时间:2023-10-29 06:47:01 25 4
gpt4 key购买 nike

我是 ruby​​ 的新手,正在尝试一些基本的东西。当我使用以下命令向服务器发送 HTTP 请求时:

curl -v -H "Content-Type: application/json" -X GET -d "{"myrequest":"myTest","reqid":"44","data":{"name":"test"}}" localhost:8099

我的服务器将 JSON 数据视为 "{myrequest:myTest,reqid:44,data:{name:test}}"

但是当我使用以下 ruby​​ 代码发送请求时:

require 'net/http'

@host = 'localhost'
@port = '8099'

@path = "/posts"

@body = ActiveSupport::JSON.encode({
:bbrequest => "BBTest",
:reqid => "44",
:data =>
{
:name => "test"
}
})

request = Net::HTTP::Post.new(@path, initheader = {'Content-Type' =>'application/json'})
request.body = @body
response = Net::HTTP.new(@host, @port).start {|http| http.request(request) }
puts "Response #{response.code} #{response.message}: #{response.body}"

它将其视为 "{\"bbrequest\":\"BBTest\",\"reqid\":\"44\",\"data\":{\"name\":\"test\"}}" 并且服务器无法解析它。也许我需要设置一些额外的选项来从 Ruby 发送请求以排除那些额外的字符?

你能帮忙吗?提前致谢。

最佳答案

您在 shell 上所做的操作会产生无效的 JSON。您的服务器不应该接受它。

  $echo "{"myrequest":"myTest","reqid":"44","data":{"name":"test"}}"
{myrequest:myTest,reqid:44,data:{name:test}}

这是带有未转义键和值的 JSON,永远不会工作。 http://jsonlint.com/如果您的服务器接受这种“某种 JSON”但不接受示例中的第二种,则您的服务器已损坏。

My server sees JSON data as "{myrequest:myTest,reqid:44,data:{name:test}}"

您的服务器看到一个字符串。当您尝试将其解析为 JSON 时,它会产生错误或垃圾。

It sees it as "{\"bbrequest\":\"BBTest\",\"reqid\":\"44\",\"data\":{\"name\":\" test\"}}"

不,这是通过 Ruby 的 Object#inspect 打印出来的。您正在某处打印 inspect 的返回值,然后尝试判断它是否是有效的 JSON - 它不是,因为您粘贴的这个字符串被粘贴到交互式 ruby​​ 控制台(irb)或 ruby​​ 脚本中,它包含内置的转义符。您需要查看原始的 JSON 字符串,只需打印字符串而不是检查它。

我认为您的服务器要么坏了要么还没有完成,您的 curl 示例坏了,而您的 ruby​​ 脚本是正确的,一旦服务器修复(或完成)就会工作。很简单,因为

  irb(main):002:0> JSON.parse("{\"bbrequest\":\"BBTest\",\"reqid\":\"44\",\"data\":{\"name\":\" test\"}}")
# => {"bbrequest"=>"BBTest", "reqid"=>"44", "data"=>{"name"=>" test"}}

关于ruby-on-rails - 通过 Ruby 的 HTTP post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com