Java解析url错误

标签 java json url

我正在尝试连接到一个 URL 并不断收到 403 错误。下面是我用来连接但失败的 2 组代码。帮帮我!谢谢!

代码块 1

URL urll = new URL("https://cws.hellogold.com/api/v2/spot_price.json");             
URLConnection yc = urll.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

代码块 2

HttpURLConnection httpURLConnection = (HttpURLConnection) urll.openConnection();
        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

错误

java.io.IOException: Server returned HTTP response code: 403 for URL: https://cws.hellogold.com/api/v2/spot_price.json
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)

最佳答案

发生这种情况是因为文件的所有者已将站点设置为禁止没有可接受 header 的查询。他们的消息是该网站 (cws.hellogold.com) 的所有者已根据您浏览器的签名 (3d20bd6848756e32-ua21) 禁止您访问。

这是向我展示情况的程序:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class JavaHello {
    public static void main(String[] args) throws Exception {
        String response;
        URL url = new URL("https://cws.hellogold.com/api/v2/spot_price.json");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.getResponseCode();
        InputStream stream = connection.getErrorStream();
        if (stream == null) 
            stream = connection.getInputStream();
        try (Scanner scanner = new Scanner(stream)) {
            scanner.useDelimiter("\\Z");
            response = scanner.next();
        }
        System.out.println(response);
    }
}

这是返回的错误页面:

/usr/lib/jvm/java-8-oracle/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:39597,suspend=y,server=n -javaagent:/opt/idea-IU-173.3727.127/lib/rt/debugger-agent.jar=/tmp/capture.props -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/mnt/_/work/experiments/scala/stackOverflow/target/scala-2.12/classes:/home/mslinn/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.4.jar:/opt/idea-IU-173.3727.127/lib/idea_rt.jar JavaHello
Connected to the target VM, address: '127.0.0.1:39597', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:39597', transport: 'socket'
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Access denied | cws.hellogold.com used Cloudflare to restrict access</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css" media="screen,projection" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" type="text/css" media="screen,projection" /><![endif]-->
<style type="text/css">body{margin:0;padding:0}</style>
<!--[if lte IE 9]><script type="text/javascript" src="/cdn-cgi/scripts/jquery.min.js"></script><![endif]-->
<!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/zepto.min.js"></script><!--<![endif]-->
<script type="text/javascript" src="/cdn-cgi/scripts/cf.common.js"></script>

</head>
<body>
  <div id="cf-wrapper">
    <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
    <div id="cf-error-details" class="cf-error-details-wrapper">
      <div class="cf-wrapper cf-header cf-error-overview">
        <h1>
          <span class="cf-error-type" data-translate="error">Error</span>
          <span class="cf-error-code">1010</span>
          <small class="heading-ray-id">Ray ID: 3d20bd6848756e32 &bull; 2017-12-24 04:15:30 UTC</small>
        </h1>
        <h2 class="cf-subheadline" data-translate="error_desc">Access denied</h2>
      </div><!-- /.header -->

      <section></section><!-- spacer -->

      <div class="cf-section cf-wrapper">
        <div class="cf-columns two">
          <div class="cf-column">
            <h2 data-translate="what_happened">What happened?</h2>
            <p>The owner of this website (cws.hellogold.com) has banned your access based on your browser's signature (3d20bd6848756e32-ua21).</p>
          </div>


        </div>
      </div><!-- /.section -->

      <div class="cf-error-footer cf-wrapper">
  <p>
    <span class="cf-footer-item">Cloudflare Ray ID: <strong>3d20bd6848756e32</strong></span>
    <span class="cf-footer-separator">&bull;</span>
    <span class="cf-footer-item"><span data-translate="your_ip">Your IP</span>: 73.241.128.88</span>
    <span class="cf-footer-separator">&bull;</span>
    <span class="cf-footer-item"><span data-translate="performance_security_by">Performance &amp; security by</span> <a data-orig-proto="https" data-orig-ref="www.cloudflare.com/5xx-error-landing?utm_source=error_footer" id="brand_link" target="_blank">Cloudflare</a></span>

  </p>
</div><!-- /.error-footer -->


    </div><!-- /#cf-error-details -->
  </div><!-- /#cf-wrapper -->

  <script type="text/javascript">
  window._cf_translation = {};


</script>

</body>
</html>

解决方案是为连接指定一个User-Agent字符串:

connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");

完成后,您将看到内容:

{"result":"ok","data":{"buy":174.03,"sell":160.64,"timestamp":"2017-12-24T04:21:00.326+00:00"}}

关于Java解析url错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957993/

相关文章:

javascript - 是否可以通过站点树远程或本地直接爬取站点树?

python - Django URL 模式

java - JUnit 测试类失败测试

java - 如何用 Java 打印接下来的 20 个闰年

java - javax.servlet-api 和 commons-dbcp 在我们的 Spring 应用程序中重要吗?

javascript - 将 HTML 添加到 JSON

c# - 清理带有标题的 URL 的最佳方法是什么

java - 添加到数组时强制关闭

java - JSP:转发页面时出错

ios - 如何在 Swift 3.0 中将 JSON 输出设置为 UILabel ?