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

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

新規登録して質問してみよう
ただいま回答率
85.50%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

Q&A

解決済

1回答

2627閲覧

Javaによる通信でステータスコードが返ってこない

aiueoaiueoaiue

総合スコア94

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

0グッド

1クリップ

投稿2018/01/12 03:12

編集2018/01/12 04:36

#問題
サンプルコードを基にHTTP通信を行いたいのですが、思い通りの実行結果になりません。始めは実行してエラーが出なかっただけで喜んでいたのですが、よくよく見たらHTTPステータスや取得したデータが表示されていないことに気づきました。これはサンプルコードのどこかがおかしいのか、URLに問題があるのかわかりません。まだ右も左も分かってないんですが分かる方ご教授お願い致します。
#サンプルコード

Java

1 2import java.io.IOException; 3import java.io.UnsupportedEncodingException; 4import java.nio.charset.Charset; 5import java.nio.charset.StandardCharsets; 6import org.apache.http.HttpStatus; 7import org.apache.http.client.ClientProtocolException; 8import org.apache.http.client.methods.CloseableHttpResponse; 9import org.apache.http.client.methods.HttpGet; 10import org.apache.http.impl.client.CloseableHttpClient; 11import org.apache.http.impl.client.HttpClients; 12import org.apache.http.util.EntityUtils; 13 14/** 15 * HttpClientsのサンプル 16 */ 17class Sample { 18 19 void runSample() { 20 Charset charset = StandardCharsets.UTF_8; 21 22 CloseableHttpClient httpclient = HttpClients.createDefault(); 23 HttpGet request = new HttpGet("http://httpbin.org/get"); 24 25 System.out.println 26 ("requestの実行 「" + request.getRequestLine() + "」"); 27 //requestの実行 「GET http://httpbin.org/get HTTP/1.1」 28 29 CloseableHttpResponse response = null; 30 31 try { 32 response = httpclient.execute(request); 33 34 int status = response.getStatusLine().getStatusCode(); 35 System.out.println("HTTPステータス:" + status); 36 //HTTPステータス:200 37 38 if (status == HttpStatus.SC_OK){ 39 String responseData = 40 EntityUtils.toString(response.getEntity(),charset); 41 System.out.println(responseData); 42 //取得したデータが表示される 43 } 44 } catch (ClientProtocolException e) { 45 e.printStackTrace(); 46 } catch (UnsupportedEncodingException e) { 47 e.printStackTrace(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } finally { 51 try { 52 if (response != null) { 53 response.close(); 54 } 55 if (httpclient != null) { 56 httpclient.close(); 57 } 58 } catch (IOException e) { 59 e.printStackTrace(); 60 } 61 } 62 } 63} 64public class Test1 { 65 public static void main(String[] args) { 66 Sample s = new Sample(); 67 s.runSample(); 68 } 69}

#実行結果
イメージ説明
イメージ説明
#参考サイト
https://itsakura.com/java-httpclient
#追記
イメージ説明
イメージ説明
上がpingの確認、下がURLにアクセスして表示された画面です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

一つ前の質問のコードそのままなら、少なくとも自分の環境(Windows10 プロバイダーはとあるCATV)で200応答(HTTPステータスの正常終了)でプログラムが完了しました。つまりお使いの計算機からこのURLへアクセスできなかったということだと思います。

pingが通るかやブラウザーで応答が受信できるかといったあたり(通信の基本的なところ)を確認したほうがよいと思います。

もしcurlなどが使えるなら

curl http://httpbin.org/get

が正常に実行できればこのjavaプログラムも動くのではないかと思います。

投稿2018/01/12 04:07

KSwordOfHaste

総合スコア18392

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

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

aiueoaiueoaiue

2018/01/12 04:27

回答ありがとうございます。pingは通ってないっぽいです。でもURLにはアクセスできました。 これはpingの確認方法が間違っているのでしょうか? 一応確認画面を追記として載せておきます。
KSwordOfHaste

2018/01/12 04:48

失礼しました。このサイトのサーバはpingに応答するようになってない(ICMPのechoに応答するようになっていない?)のかも知れません。自分のことろでもpingは通りませんでした。 ブラウザーからURLにアクセスできるとすると・・・プロキシー等々別の問題なのだろうと思います。どんな可能性があるかはそうまで詳しくないので自分では的確なアドバイスができません。すみません。
KSwordOfHaste

2018/01/12 05:00 編集

なるほど。比較のためにコメントしますが、自分の環境では ブラウザーからアクセス:〇 curl: 〇 javaプログラム: 〇 でした。
aiueoaiueoaiue

2018/01/12 05:29

httpが正しいです。sつけたのは何も考えず適当に付けてしまっただけです・・・。
KSwordOfHaste

2018/01/12 05:52 編集

おっと・・・httpとhttpsでは大違いなので適当に考えるべきではないですよ? httpなら簡単ですが、httpsは証明書の設定方法などをきちんと把握し環境を設定できてないと通信は無理と思います。 コメントありがとうございます。>momon-gaさん
aiueoaiueoaiue

2018/01/13 16:27

今までは他人のPCで実行していましたが、自分のPCで実行してみたら見事に予想通りの実行結果が得られました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問