2017-10-14 7 views
0

URLから文字列をダウンロードするのにokhttpを使用しています。ここにコードがあります。Java OkHttp要求を満たすことができません

public static void main(String[] args) throws InterruptedException { 
    String jsonString = downloadJsonString("https://api.korbit.co.kr/v1/ticker/detailed?currency_pair=btc_krw"); 
    System.out.println(jsonString); 
} 

String downloadJsonString (String url) throws IOException { 
    OkHttpClient okHttpClient = new OkHttpClient(); 
    Request request = new Request.Builder() 
      .url(url) 
      .build(); 
    Response response = okHttpClient.newCall(request).execute(); 
    return response.body().string(); 
} 

結果はこのようなものです:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> 
<TITLE>ERROR: The request could not be satisfied</TITLE> 
</HEAD><BODY> 
<H1>ERROR</H1> 
<H2>The request could not be satisfied.</H2> 
<HR noshade size="1px"> 
Request blocked. 
<BR clear="all"> 
<HR noshade size="1px"> 
<PRE>Generated by cloudfront (CloudFront) 
Request ID: jIs6PvNF01BMsQrynj4pk8eBXuQW-n-Q02Tav0SQghSZ7TzZOFfrAg== 
</PRE> 
<ADDRESS> 
</ADDRESS> 
</BODY></HTML> 

私はブラウザにURLを入れた場合は、それが正常に動作します。応答は次のとおりです。

{"timestamp":1507942765556,"last":"6355000","bid":"6355000","ask":"6358500","low":"6310000","high":"6949000","volume":"12329.815314799943534093","change":"0","changePercent":"0"} 

解決方法は?

答えて

2

あなたの回答はコルビットの403 Forbiddenです。 Korbit APIでは認証の詳細を入力する必要があるため、この応答が得られます。 the docsから:

コルビットAPIを使用する前に、ユーザーを認証する必要があります。 Korbit APIはOAuth 2.0インターフェイスを提供するため、認証が成功するとアクセストークンを取得します。 APIリクエストごとに、アクセストークンを使用してAuthorization HTTPヘッダーを設定する必要があります。 APIキーと秘密

Korbit APIを使用するには、APIキーとシークレットをリクエストする必要があります。すべてのKorbitユーザーは、KorbitのWebサイトからAPIキーを入手できます。アクセストークン(およびリフレッシュトークン)を取得するには、POST要求の本文にユーザー名とパスワードが必要な直接認証API呼び出しによってKorbitアカウントにサインインすることができます。この文書では、APIキーを示し、対応するAPIシークレットを示します。

したがって、コルビットに登録すると、認証の詳細が表示され、その詳細がHTTPリクエストに含まれます。

同じがブラウザ経由で完了していることが示されていますが、これはKorbitが(プログラム型HTTPクライアントではなく)ブラウザから発信された認証されていない呼び出しを許可するためです。これを証明するには、ブラウザからの呼び出しをトレースするだけで、要求にはone of these valuesという名前の "User-Agent"というヘッダーが含まれています。次のように

あなたはあなたのコードでこれを模倣することができます:

Request request = new Request.Builder() 
     .url(url) 
     .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:51.0)") 
     .build(); 

これはあなたの呼び出しが正常に完了することが可能だろうが、これはお勧めと私はKorbitが試行限られた数の後にそれを許可しません疑っていません。代わりに、Korbit's instructionsに従ってyourelfを登録してから、リクエストヘッダーに認証の詳細を提供する必要があります。

+0

ありがとうございます。私は彼らにユーザーエージェントが必要だとは思っていません。 – milosmns

関連する問題