Techioz Blog

Ruby: Net::HTTP この POST リクエストで 400 を受け取るのはなぜですか?

概要

GPTZeroのAPIを試しています。ドキュメント。

ドキュメントには、ヘッダーに API キーを設定する必要があると記載されています。 Web サイトには「限られた回数の使用であれば、API キーなしで API をここのドキュメントで試すことができます」と記載されているため、空白文字列のままにしました。

ドキュメントとバージョンのパラメータが正しく設定されていると思います。

これが私のRubyです:

base = "https://api.gptzero.me"
uri = URI("#{base}/v2/predict/text")

api_key = ""
headers = {
  "x-api-key" => api_key
}
params = {
  "document" => "How now, brown cow.",
  "version" => ""
}


res = Net::HTTP.post(uri, params.to_json, headers)

ただし、応答は 400 Bad Request で、「テキストは文字列である必要があります」というエラー メッセージが表示されます。

私のリクエストの何が間違っているのでしょうか?正しく送信できましたか?

解決策

Content-Type ヘッダーが欠落しているようです。この例は私にとってはうまくいきます:

require "net/http"
require "json"
base = "https://api.gptzero.me"
uri = URI("#{base}/v2/predict/text")

api_key = ""
headers = {
  "x-api-key" => api_key,
  "Content-Type" =>  "application/json"
}
params = {
  "document" => "How now, brown cow.",
  "version" => "2023-06-30"
}

res = Net::HTTP.post(uri, params.to_json, headers)
puts res.body

印刷します

{"version":"2023-06-30","documents":[{"average_generated_prob":0.0475141815841198,"completely_generated_prob":0.0475141815841198,"overall_burstiness":0,"paragraphs":[{"completely_generated_prob":0.11111110864197533,"num_sentences":1,"start_sentence_index":0}],"sentences":[{"generated_prob":0.0475141815841198,"perplexity":947,"sentence":"How now, brown cow.","highlight_sentence_for_ai":false}],"writing_stats":{},"result_message":"Your text is likely to be written entirely by a human","document_classification":"HUMAN_ONLY","version":"2023-06-30","document_id":"174f6d03-1cdf-4ed7-a1e3-99f23d76d0b2"}]}