0

我正在使用 ruby​​ 1.9.3 和 httparty gem 发出以下 API GET 请求:

uri= HTTParty.post("www.surveys.com/api/v2/contacts",
:basic_auth => auth,
:headers => { 'ContentType' => 'application/json' },
:body => {
  "custom_test" => test,
  "name" => firstname,
  "email" => emailaddress
}

)

变量authtestfirstnameemailaddress是有效的。这是我从我的请求中收到的回复:

{
  "code": "invalid_json",
  "description": "Request sent with Content-Type: application/json but was unable to decode request body as valid json.",
  "success": false
}
500
#<Net::HTTPInternalServerError:0x007fe4eb98bde0>

我发布此 JSON 请求的方式有什么问题?

编辑:可能值得注意的是,API 允许您为联系人定义自定义属性,因此正文中的“custom_test”属性。

4

2 回答 2

4

由于您收到的是内部服务器错误 (500) 而不是未接受 (406),因此服务器上很可能存在编码问题,因为正在发生他未预料到的异常,而不是向您传递一个很好的错误,解释什么是错误的(这将是我的第一个猜测)。

但假设这是 JSON 通信的问题。也许您必须指定您接受 json 格式?

尝试

:headers => { 'ContentType' => 'application/json', 'Accept' => 'application/json' },

接受来自w3的标头定义:

Accept request-header 字段可用于指定响应可接受的某些媒体类型。接受标头可用于指示请求特别限于一小组所需类型,例如对内嵌图像的请求。

和内容类型头定义:

Content-Type entity-header 字段指示发送给接收者的实体主体的媒体类型,或者在 HEAD 方法的情况下,如果请求是 GET,则将发送的媒体类型。

于 2013-08-20T19:12:33.087 回答
2

您正在发送一个常规的 HTTP 查询字符串,同时说它是 json。来自 HTTParty 手册:“body:请求的主体。如果是 Hash,则转换为查询字符串格式,否则按原样发送。”

尝试:

:body => JSON.generate({
  "custom_test" => test,
  "name" => firstname,
  "email" => emailaddress
})

你需要'JSON'

于 2013-08-20T19:41:49.020 回答