Java 读取URL出错

Java 读取URL出错,java,json,url,stream,httpurlconnection,Java,Json,Url,Stream,Httpurlconnection,我想读https://www.instagram.com/mobonews/?__a=1使用Java语言。以下URL的源代码等于: {"logging_page_id":"profilePage_1410389643","show_suggested_profiles":false,"show_follow_dialog":false,"graphql":{"user":{&q

我想读
https://www.instagram.com/mobonews/?__a=1
使用Java语言。以下URL的源代码等于:

{"logging_page_id":"profilePage_1410389643","show_suggested_profiles":false,"show_follow_dialog":false,"graphql":{"user":{"biography":"\u200f\u200e\u0645\u0627\u062c\u0631\u0627\u062c\u0648\u06cc\u06cc\u200c\u0647\u0627\u06cc \u0645\u0646 \u062f\u0631 \u062
但以下代码将返回此值:

<!DOCTYPE html><html lang="en" class="no-js not-logged-in client-root">    <head>        <meta charset="utf-8">        <meta http-equiv="X-UA-Compatible" content="IE=edge">        <title>Login • Instagram</title>                <meta name="robots" content="noimageindex, noarchive">        <meta name="apple-mobile-web-app-status-bar-style" content="default">        <meta name="mobile-web-app-capable" content="yes">        <meta name="theme-color" content="#ffffff">        <meta id="viewport" name="viewport"
编辑:

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.commons.io.IOUtils;

public class TestReadurlInsta {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        
  URL u = new URL("https://www.instagram.com/mobonews/?__a=1");

URLConnection con = u.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding(); 
encoding = encoding == null ? "UTF-8" : encoding;
String body = IOUtils.toString(in, encoding);
System.out.println(body);
    
    }
编辑2:

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.commons.io.IOUtils;

public class TestReadurlInsta {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        
  URL u = new URL("https://www.instagram.com/mobonews/?__a=1");

URLConnection con = u.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding(); 
encoding = encoding == null ? "UTF-8" : encoding;
String body = IOUtils.toString(in, encoding);
System.out.println(body);
    
    }
我似乎因为未知原因而进入instagram的登录页面:

<!DOCTYPE html> <html lang="en" class="no-js not-logged-in client-root">     <head>         <meta charset="utf-8">         <meta http-equiv="X-UA-Compatible" content="IE=edge">          <title> Login • Instagram </title>
Login•Instagram
在过去,我从同一台机器上运行相同的代码,itt还可以,但突然它让我陷入了这个问题

编辑3

我从一个在线IDE运行了相同的代码,并收到了以下异常。似乎拒绝获得连接,正如@Holger所说,Instagram可能会阻止访问该资源:

Exception in thread "main" java.net.UnknownHostException: www.instagram.com
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at java.net.URL.openStream(URL.java:1045)
at HelloWorld.main(HelloWorld.java:14)
线程“main”java.net中的异常。未知hostexception:www.instagram.com
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
位于sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:180)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
在sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:264)
位于sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
位于sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
在java.net.URL.openStream(URL.java:1045)
位于HelloWorld.main(HelloWorld.java:14)

但是有什么解决办法吗?

我将url作为字符串传递给函数,并使用bufferedReader。 看起来你只是打印了页面的主体,所以你得不到源代码

这是我使用的代码

public class Solution {
    public static void main(String[] args) throws IOException {
        String str = getContent("https://www.instagram.com/mobonews/?__a=1");
        System.out.println(str);
    }
    public static String getContent(String url) throws IOException {
        URL website = new URL(url);
        URLConnection connection = website.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));

        StringBuilder response = new StringBuilder();
        String inputLine = "";
        
            inputLine = in.readLine();

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

我运行了你的代码,它返回了你想要的输入。检查您是否传递了正确的字符串,或者继续调试您的代码。@Raz我再次检查了,但仍然没有运气,但如何传递url?调试程序时,您能否附加更多的代码部分或添加一些数据?@Raz请查看我的editInstagram是否发布了一项关于重复自动访问此类提要资源的策略?对于它的普通网页,我也会在一些访问之后得到一个强制登录页面,你说,你以前在同一台机器上运行过相同的代码。所以这并不是什么不寻常的事情(这也解释了为什么所有其他用户在第一次尝试URL时都无法重现这个问题)。使用您的代码仍然会得到相同的错误输出。实际上,我在几个月前使用了我的代码,它工作得很好,但现在它突然返回错误的输出。我不知道why@lonesome当您使用浏览器访问上述URL时会发生什么情况?@lonesome如何运行代码?它是否通过了可能无法正确访问Instagram的机器?我刚才检查过。我已登录insta,并使用NetBeans作为我的ID。返回的代码实际上显示instagram登录页面的HTML代码:
Login•instagram