JAVA:在代码空JSON,在浏览器

问题描述:

充满JSON,我试图从该URL一个JSON对象:JAVA:在代码空JSON,在浏览器

http://www.alfanous.org/jos2?action=search&unit=aya&fuzzy=True&query=حم 

然而,当我与URL运行我的代码,我有一个空的JSON ,并且当我从浏览器请求url时,josn被填充。

我的代码有什么问题?

URL url = new URL("http://www.alfanous.org/jos2?action=search&unit=aya&fuzzy=True&query=حم"); 
    URLConnection conn = url.openConnection(); 
    InputStream is = conn.getInputStream(); 
    Scanner scan = new Scanner(is); 
    while (scan.hasNextLine()) { 
     System.out.println(scan.nextLine()); 
    } 

而且我想也

// Create URL object 
    URL obj = new URL("http://www.alfanous.org/jos2?action=search&unit=aya&fuzzy=True&query=حم"); 

    // Communicate with the URL by HTTP 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

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

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

    // Getting response data 
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 
    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 
    System.out.println(response.toString()); 
+1

你有错误吗? – Abdelhak

+0

我没有错误。 –

+1

尝试使用数据包嗅探器比较浏览器和应用程序的http请求(特别是标头)。根据哪个应用程序发送请求,服务器似乎行为不同。 – f1sh

的解决办法是将它传递给URL构造函数之前的URL字符串编码。

String urlstring = "http://www.alfanous.org/jos2?action=search&unit=aya&fuzzy=True&query=حم"; 
URLEncoder.encode(urlstring, "UTF-8"); 
URL url = new URL(urlstring); 

然后继续前面的代码显示在原始文章。

URLConnection conn = url.openConnection(); 
InputStream is = conn.getInputStream(); 
Scanner scan = new Scanner(is); 
while (scan.hasNextLine()) { 
    System.out.println(scan.nextLine()); 
} 

道德是..我应该在使用它之前对网址进行编码!

尝试使用BufferedReader这样的:

URL url = new URL("http://www.alfanous.org/jos2?action=search&unit=aya&fuzzy=True&query=حم"); 
    URLConnection conn = url.openConnection(); 
    BufferedReader br =new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((thisLine = br.readLine()) != null) { 
     System.out.println(thisLine); 
    }