无法满足Java OkHttp请求

无法满足Java OkHttp请求,java,authentication,url,httprequest,okhttp,Java,Authentication,Url,Httprequest,Okhttp,我正在使用okhttp从url下载字符串。这是代码 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); }

我正在使用okhttp从url下载字符串。这是代码

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>

如何解决?

您得到的响应是Korbit的
403禁止
响应。您得到此响应是因为Korbit API要求您提供一些身份验证详细信息。发件人:

在使用Korbit API之前,您需要对用户进行身份验证。由于Korbit API提供了OAuth 2.0接口,因此在成功的身份验证之后,您将获得一个访问令牌。对于每个API请求,您需要使用访问令牌设置授权HTTP头。 API密钥和机密

您需要请求API密钥和密码才能使用Korbit API。所有Korbit用户都可以通过Korbit网站获得API密钥。您可以通过直接身份验证API调用登录到Korbit帐户,这需要POST请求主体中的用户名和密码才能获得访问令牌(和刷新令牌)。在本文档中,表示API密钥,并表示相应的API密钥

因此,您向Korbit注册,他们向您提供一些身份验证详细信息,然后您将这些详细信息包括在HTTP请求中

您声明相同的调用通过浏览器完成,这一定是因为Korbit允许来自浏览器(而不是编程HTTP客户端)的未经验证的调用。为了证明这一点,只需从浏览器中跟踪调用,您就会发现请求包含一个名为“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的
403禁止响应。您得到此响应是因为Korbit API要求您提供一些身份验证详细信息。发件人:

在使用Korbit API之前,您需要对用户进行身份验证。由于Korbit API提供了OAuth 2.0接口,因此在成功的身份验证之后,您将获得一个访问令牌。对于每个API请求,您需要使用访问令牌设置授权HTTP头。 API密钥和机密

您需要请求API密钥和密码才能使用Korbit API。所有Korbit用户都可以通过Korbit网站获得API密钥。您可以通过直接身份验证API调用登录到Korbit帐户,这需要POST请求主体中的用户名和密码才能获得访问令牌(和刷新令牌)。在本文档中,表示API密钥,并表示相应的API密钥

因此,您向Korbit注册,他们向您提供一些身份验证详细信息,然后您将这些详细信息包括在HTTP请求中

您声明相同的调用通过浏览器完成,这一定是因为Korbit允许来自浏览器(而不是编程HTTP客户端)的未经验证的调用。为了证明这一点,只需从浏览器中跟踪调用,您就会发现请求包含一个名为“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会在有限的尝试次数后拒绝这样做。相反,您需要关注并注册您自己,然后在请求头中提供您的身份验证详细信息。

谢谢。我不敢相信他们需要一个用户代理。谢谢。我不敢相信他们需要一个用户代理。