質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

1141閲覧

API(Jdoodle compiler API)にPOSTできない

Monkuma

総合スコア3

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2021/06/02 23:34

編集2021/06/03 01:59

前提・実現したいこと

ブラウザで利用できる簡易オンラインコンパイラを作りたい。
AceEditorでコードを受け取りJdoodleAPIにコードを送信し出力結果を得るという流れを実現させようとしています。

・JdoodleAPI Document
https://docs.jdoodle.com/compiler-api/compiler-api

発生している問題・エラーメッセージ

  1. Ajaxで入力コードをJavaにPOST
  2. JavaからJdoodle APIにPOST

→Javaにて下記エラー(Ajaxはエラーなし)

java.lang.RuntimeException: Please check your inputs : HTTP error code : 403

該当のソースコード

JavaScript

1 2function sampleAjax(script) { 3 //リクエストJSON 4 var request = { 5 script : script, 6 }; 7 console.log("Script : " + script); 8 //ajaxでservletにリクエストを送信 9 $.ajax({ 10 type : "POST", 11 url : "JavaServletURL", 12 data : request, 13 async : true, 14 success : function(data) { 15 var rs = document.getElementById("result-area"); 16 console.log("Success"); 17 rs.innerText = data; 18 }, 19 error : function(XMLHttpRequest, textStatus, errorThrown) { 20 alert("リクエスト時になんらかのエラーが発生しました:" + textStatus +":\n" + errorThrown); 21 } 22 }); 23} 24

JavaServlet

1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 3 try { 4 5 String script = request.getParameter("script"); 6 7 CompileLogic bo = new CompileLogic(); 8 String result = bo.execute(script_f); 9 10 PrintWriter pw = response.getWriter(); 11 12 pw.print(result); 13 14 pw.close(); 15 16 } catch(Exception e) { 17 e.printStackTrace(); 18 } 19 20 } 21 22}

Java

1package model; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.io.OutputStream; 7import java.net.HttpURLConnection; 8import java.net.MalformedURLException; 9import java.net.URL; 10import java.util.ResourceBundle; 11 12import org.json.JSONObject; 13 14public class CompileLogic { 15 16 public String execute(String targetScript) { 17 String clientId = ***; 18 String clientSecret = ***; 19 20 String script = targetScript; 21 String language = "java"; 22 String versionIndex = "0"; 23 24 try { 25 URL url = new URL("https://api.jdoodle.com/v1/execute"); 26 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 27 connection.setDoOutput(true); 28 connection.setRequestMethod("POST"); 29 connection.setRequestProperty("Content-Type", "application/json"); 30 31 String input = "{\"clientId\": \"" + clientId + "\",\"clientSecret\":\"" + clientSecret + "\",\"script\":\"" + script + 32 "\",\"language\":\"" + language + "\",\"versionIndex\":\"" + versionIndex + "\"} "; 33 34 OutputStream outputStream = connection.getOutputStream(); 35 outputStream.write(input.getBytes()); 36 outputStream.flush(); 37 38 if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { 39 throw new RuntimeException(input + "Please check your inputs : HTTP error code : "+ connection.getResponseCode()); 40 } 41 42 BufferedReader bufferedReader; 43 bufferedReader = new BufferedReader(new InputStreamReader( 44 (connection.getInputStream()))); 45 46 String output; 47 48 while ((output = bufferedReader.readLine()) != null) { 49 JSONObject json = new JSONObject(output); 50 String resultScript = json.getString("output"); 51 return resultScript; 52 } 53 54 connection.disconnect(); 55 56 } catch (MalformedURLException e) { 57 e.printStackTrace(); 58 } catch (IOException e) { 59 e.printStackTrace(); 60 } 61 return null; 62 } 63 64} 65

試したこと

  1. ローカル環境で実行

問題なくコンパイルでき出力を得ることができました。

  1. 403 Errorを調べたところサーバー側で認証はできたが権限がないとのことですがローカルで実行できてます。したがって本番環境またはJdoodleサーバー側で問題が発生してるのかなと考えています...。

補足情報(FW/ツールのバージョンなど)

[本番環境]
さくらVPS
CentOS7
Openjdk 1.8.0_292
Tomcat 9.0.45
Apache 2.4.6

[ローカル環境]
Windows10
Openjdk 12.0.1
Tomcat 9.0.34
Eclipse 2020-03 (4.15.0)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下のページのとおりにやったら実行できました!
理由はよくわかりませんでしたが...。
https://stackoverflow.com/questions/26969550/httpurlconnection-server-return-http-403-forbidden

ありがとうございました。

投稿2021/06/03 06:29

編集2021/06/03 06:31
Monkuma

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問