0

Guardian のニュース フィードに接続して、JSON をダウンロードしています。ときどき JavaScript が返され、エラーが発生します。URL は静的な最終文字列に格納されるため、常に同じです。デバッガーに表示される URL は、JSON に対して正しいものです。実際、デバッガーの式ウィンドウから URL をコピーしてブラウザーに貼り付けると、JSON が返されます。問題はガーディアンにあるとは思いません。接続コードの何かが何らかの形で URL を破損している可能性があり、ガーディアンがデフォルトとして JavaScript を送信しています。しかし、私は本当に知りません。

すべての場合に使用される URL は次のとおりです。format-json に注意してください:

static final String GuardianUrl = "http://content.guardianapis.com/search?format=json&show-fields=headline%2Cbody%2Cthumbnail%2CtrailText%2ClastModified&date-id=date%2Ftoday&api-key=mykey";

正しく返されたときの JSON ファイルの先頭は次のとおりです。 ":10, "currentPage":1, "pages":21, "orderBy":"newest", "results":[{ など.

そして、これが JavaScript の場合に返されるものです。

  09-21 15:00:18.853: E/JSON Parser(22101): Error converting string to json <html><head>  <script language='javascript' type='text/javascript'>function init(_frm) { if (_frm.sent.value == 0) { _frm.sent.value=1; _frm.submit(); } }</script></head><body onload=init(auth)><form name=auth action='http://192.168.3.1:10080/ui/dynamic/guest-login.html' METHOD=GET><input type=hidden name='mac_addr' value='e0:75:7d:d3:15:0a'><input type=hidden name='url' value='http://content.guardianapis.com/search?format=json&#38show-fields=headline%2Cbody%2Cthumbnail%2CtrailText%2ClastModified&#38date-id=date%2Ftoday&#38api-key=pdva9u6ac2rqsx9a7hexzrv3'><input type=hidden name='ip_addr' value='192.168.3.142'><input type=hidden id=sent value='0'><noscript><input type=submit value='continue'></noscript></form></body></html>  ... etc

これは、ファイルに接続してダウンロードするコードです。

public String getJSONFromUrl(String _url) throws IOException {

    URL url = new URL(_url);
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();

        // Making HTTP request
        try {
            //ByteArrayOutputStream out = new ByteArrayOutputStream();
            //InputStream in = connection.getInputStream();

            if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return null;
            }

            String line;
            StringBuilder builder = new StringBuilder();

            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            while((line = reader.readLine()) != null) {
                builder.append(line);
            }


            if (builder.toString().length()>0)
                   json = builder.toString();
            return json;

        } finally {
            connection.disconnect();
        }
   }                
4

1 に答える 1

0

コードではなく、ルーターに問題があるようです。機能しない場合、表示されている応答はルーターからのものです。ひょっとして、Linksys E4200 でゲスト ネットワーク機能を使用していませんか? 取得している応答は、ゲスト ログイン ページです。これは役に立つかもしれません: http://homecommunity.cisco.com/t5/Social-Support/Amazon-com-EA6500-Guest-network-became-inaccessible-after-a/td-p/583866

于 2013-09-21T19:30:06.727 に答える