🐕

GPTZeroのAPIから403エラーが返ってくる

に公開

解決方法

リクエストのヘッダーにUser-Agentを追加して送信すると解決しました。


use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use JSON;

sub _POST_GPTZero_SINGLE_STRING {
  # GPTZeroに文字列を投げて結果をJSONで取得する
  my ($IN_TEXT) = @_;

  my $X_API_KEY = "abc"; # ここにAPIキーを入れる
  my $ua = LWP::UserAgent->new;
  my $url = "https://api.gptzero.me/v2/predict/text";
  my %post_data = ('document' => $IN_TEXT);
  my $json_data = encode_json(\%post_data);
  my $request = HTTP::Request->new(POST => $url);
  $request->header('x-api-key' => $X_API_KEY);
  $request->header('Content-Type' => 'application/json');
  $request->header('Accept' => 'application/json');
  $request->header('User-Agent' => 'myAgent/1.0'); # <---------- これを追加していないと403エラーが返ってくる
  $request->content($json_data);
  #
  my $response = $ua->request($request);
  my $status_code = $response->code;
  my $decoded_content = $response->decoded_content; # JSON data
  #
  return ($status_code, $decoded_content);
}

参考

AI-detection on single string

おわりに

公式ドキュメントでもググってもUser-Agentを追加しないと403エラーが返ってくるという情報は見当たりませんでした。
Postmanで試すとエラーにならなくて、サーバからリクエストを送るとエラーになるという状況で一つずつヘッダーを追加していって解決しました。

GitHubで編集を提案

Discussion