You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ruby的Net::HTTP调用GPTZero API时POST请求返回400错误排查

问题排查与解决方案

针对你遇到的Text must be a string错误,核心原因是请求体中document参数的格式不符合API要求,以下是具体排查点和修正方法:

1. 确认document参数的类型

GPTZero试用API要求document必须是单个字符串,不能是数组、嵌套对象或其他类型。如果你的代码里把document设成了数组(比如document: ["你的文本"]),就会触发这个错误。正确写法应为:

document: "需要检测的完整文本内容"

2. 确保请求体正确序列化并设置请求头

Ruby发送POST请求时,必须将请求体序列化为JSON字符串,同时设置Content-Type: application/json请求头,否则API无法正确解析参数。

错误示例(易踩坑)

require 'net/http'
require 'uri'

uri = URI('https://api.gptzero.me/v2/predict/text')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
# 错误:document是数组,且未将哈希转为JSON字符串
request.body = { document: ["测试文本"], version: "2024-01-01" }

response = http.request(request)
puts response.body

修正后的代码

require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.gptzero.me/v2/predict/text')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
# 正确:document为字符串,且将哈希序列化为JSON
request.body = { document: "需要检测的完整文本内容", version: "2024-01-01" }.to_json

response = http.request(request)
puts response.body

3. 检查参数名与内容有效性

  • 确认参数名是document,而非text、documents等拼写错误的名称
  • 确保document的值是非空字符串,不能为nil、数字或空文本

内容的提问来源于stack exchange,提问作者user3574603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:42:06