2016-10-25 41 views
3

HTTPリクエストを使用してAPIからJSONを取得しようとしています。しかし、依頼を設定することはできません。ここで私はHTTPトランスポートオブジェクトを作成することを余儀なくされた私の現在のコードHTTP転送とHTTPリクエスト

HttpTransport transport = new HttpTransport() { 
    @Override 
    protected LowLevelHttpRequest buildRequest(String s, String s1) throws IOException { 
     return null; 
    } 
}; 

ですが、私はそれに入れて何見当がつかない、ドキュメントがあまりにも

@Override 
public void action(String[] args, MessageReceivedEvent event) { 
    HttpRequest request=new HttpRequest(transport,"GET"); 
    request.setUrl(url); 
    request.setConnectTimeout(5000); 
    try { 
     request.execute(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

URL私にすべての手がかりを与えるものではありません承認に使用されたJson Webトークンを既に含んでいます。 HttpRequestを初期化するとき

しかし、それは私に次のエラーを与える:私はブラケットをクリアしたときに

'HttpRequest(com.google.api.client.http.HttpTransport, java.lang.String)' is not public 
in 'com.google.api.client.http.HttpRequest'. 
Cannot be accessed from outside package 

このエラーは、さらに、表示されない:

HttpRequest request=new HttpRequest(); 

誰もが知っているか、どのようなI間違ってる?

アップデート:私は私のコードを固定し、それでもエラーを取得しました:

HttpTransport transport = new ApacheHttpTransport(); 
    HttpRequestFactory requestFactory = transport.createRequestFactory(); 
    try { 
     HttpRequest request = requestFactory.buildGetRequest(url); 
     request.execute(); 
     System.out.println(request.getContent()); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 

Iが示されますエラーは次のとおりです。

avax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 

編集:私は以下の例を使用する場合でも、このエラーを返します

+2

を見ていたしなければならないHttpRequestFactoryを取得するには

_ApacheHttpTransport_。 https://developers.google.com/api-client-library/java/google-http-java-client/reference/1.20.0/com/google/api/client/http/HttpTransport – zeppelin

+0

を参照してください。 HttpTransportをApachHttpTransportに置き換え、何も変更していないようです... –

答えて

2

これは、HttpRequestコンストラクターが呼び出しを保護されていることを意味します。 HttpRequestFactory工場を使用してHttpRequestインスタンスを作成する必要があります。あなたはHttpTransportあなたは、例えば、代わりにそれの具体的な実装の1つを使用する必要があるので_HttpTransport_は、抽象クラスであるhttps://developers.google.com/api-client-library/java/google-http-java-client/reference/1.20.0/com/google/api/client/http/HttpTransport

HttpTransport transport = new ApacheHttpTransport(); 
HttpRequestFactory requestFactory = transport.createRequestFactory(); 
HttpRequest request = requestFactory.buildGetRequest(url); 
HttpResponse response = request.execute(); 
    try { 
     // process the HTTP response object 
      InputStream is = response.getContent(); 
      try { 
       // Process the input stream.. 
      } finally { 
       is.close(); 
      } 
    } finally { 
     response.disconnect(); 
    } 

Never tried the example hope it will work.

+0

動作するようです。 しかし、2つの質問: 1. URLを_requestBody_にする必要がありますか?あなたはそれにJSONを入れましたが、これは明らかにこれを示していません。 2.後でJSONはどこに保存されますか? _transport_で? –

+1

POSTリクエストでした。あなたはGETを呼びたいと思うので、身体を全く提供する必要はありません。私は例を変更しました。 –

+0

あなたのコードを追加し、応答を見るために 'System.out.println(request.getContent());'を追加しました。しかし、その応答は_null_です。 URLをブラウザに直接入力すると、それは動作します –

関連する問題