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