如何从unocoin比特币交换的ticker API读取FAKE JSON响应?

时间:2017-12-18 13:34:41

标签: java json api

首先,我很抱歉,如果我错了,答案是假的JSON ...... 我正在使用的api是unocoin的自动收录机 https://www.unocoin.com/trade?all

我一直在研究一个网站,该网站从各种印度比特币交换中获取费率并绘制图表以便于可视化。到目前为止,我已经添加了3个交换并从他们的TICKER API获得了他们的费率,我得到的反应只是飞机文字,没有其他惊喜..

所有这些交流都像 ZEBPAY:https://www.zebapi.com/api/v1/market/ticker/btc/inr Koinex:https://koinex.in/api/ticker 让我的生活更轻松但是 向unocoin api发出get请求给我一个html页面,在body标签中只有一个iframe,我无法直接(或间接)使用我的代码中的数据。 还有另一种方法可以访问许多功能,但它需要我在我现在不喜欢的每个请求中注册和提供我的ACCESS TOKEN。

进行api调用我正在使用java,代码在下面给出:

private static String sendGet(String host,String apiEndpoint) throws Exception {

    URL obj = new URL(host+apiEndpoint);

    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // optional default is GET
    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println(responseCode);
    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    return(response.toString());
}

只是一个注释:如果我在很短的时间内提出了很多请求,我就会收到google recaptcha

上面代码的结果是

<html><head><META NAME="robots" CONTENT="noindex,nofollow"><script src="/_Incapsula_Resource?SWJIYLWA=2977d8d74f63d7f8fedbea018b7a1d05"></script><script>(function() { var z="";var b="7472797B766172207868723B76617220743D6E6577204461746528292E67657454696D6528293B766172207374617475733D227374617274223B7661722074696D696E673D6E65772041727261792833293B77696E646F772E6F6E756E6C6F61643D66756E6374696F6E28297B74696D696E675B325D3D22723A222B286E6577204461746528292E67657454696D6528292D74293B646F63756D656E742E637265617465456C656D656E742822696D6722292E7372633D222F5F496E63617073756C615F5265736F757263653F4553324C555243543D363726743D373826643D222B656E636F6465555249436F6D706F6E656E74287374617475732B222028222B74696D696E672E6A6F696E28292B222922297D3B69662877696E646F772E584D4C4874747052657175657374297B7868723D6E657720584D4C48747470526571756573747D656C73657B7868723D6E657720416374697665584F626A65637428224D6963726F736F66742E584D4C4854545022297D7868722E6F6E726561647973746174656368616E67653D66756E6374696F6E28297B737769746368287868722E72656164795374617465297B6361736520303A7374617475733D6E6577204461746528292E67657454696D6528292D742B223A2072657175657374206E6F7420696E697469616C697A656420223B627265616B3B6361736520313A7374617475733D6E6577204461746528292E67657454696D6528292D742B223A2073657276657220636F6E6E656374696F6E2065737461626C6973686564223B627265616B3B6361736520323A7374617475733D6E6577204461746528292E67657454696D6528292D742B223A2072657175657374207265636569766564223B627265616B3B6361736520333A7374617475733D6E6577204461746528292E67657454696D6528292D742B223A2070726F63657373696E672072657175657374223B627265616B3B6361736520343A7374617475733D22636F6D706C657465223B74696D696E675B315D3D22633A222B286E6577204461746528292E67657454696D6528292D74293B6966287868722E7374617475733D3D323030297B706172656E742E6C6F636174696F6E2E72656C6F616428297D627265616B7D7D3B74696D696E675B305D3D22733A222B286E6577204461746528292E67657454696D6528292D74293B7868722E6F70656E2822474554222C222F5F496E63617073756C615F5265736F757263653F535748414E45444C3D313539373232303738303038363836383835372C31313637303136303238393537363439373530392C373430383533373634363033313237303235322C353332303936222C66616C7365293B7868722E73656E64286E756C6C297D63617463682863297B7374617475732B3D6E6577204461746528292E67657454696D6528292D742B2220696E6361705F6578633A20222B633B646F63756D656E742E637265617465456C656D656E742822696D6722292E7372633D222F5F496E63617073756C615F5265736F757263653F4553324C555243543D363726743D373826643D222B656E636F6465555249436F6D706F6E656E74287374617475732B222028222B74696D696E672E6A6F696E28292B222922297D3B";for (var i=0;i<b.length;i+=2){z=z+parseInt(b.substring(i, i+2), 16)+",";}z = z.substring(0,z.length-1); eval(eval('String.fromCharCode('+z+')'));})();</script></head><body><iframe style="display:none;visibility:hidden;" src="//content.incapsula.com/jsTest.html" id="gaIframe"></iframe></body></html>

我只是希望响应就像我访问后进入浏览器一样 https://www.unocoin.com/trade?all

2 个答案:

答案 0 :(得分:0)

该网站受到名为Incapsula的反抓取脚本的保护,该脚本试图运行一个小的Javascript位,但由于您使用的是Java,因此无法运行它,除非您使用{{ 1}}或者像Selenium引擎一样,但这有点不推荐,因为你在某种程度上打破了他们认为对他们有侵扰性的规则,但我的建议是:

与来自V8的人交谈,并要求他们将您的IP列入白名单,如果他们可以抓取他们的网站。

答案 1 :(得分:0)

您可以通过抓取Unocoin Ticker API所有费率网页来代替使用API​​。如果网站有一些变化,这会破坏,但在此之前它会起作用。

可以使用WebKitWKWebView协议通过WKNavigationDelegate实施,然后注入一些JavaScript

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    @IBOutlet weak var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.isHidden = true
        webView.navigationDelegate = self

        let myURL = URL(string: "https://www.unocoin.com/trade?all")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }

    // For checking if website has loaded
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // Injecting JS to fetch HTML inside <body>
        webView.evaluateJavaScript("document.body.innerHTML", completionHandler: {
            (html: Any?, error: Error?) in

            if error == nil && html != nil {
                // Perform string manipulation and parse JSON to get data
            } else {
                // Error while fetching data
            }
        })
    }
}