【问题标题】:JAVA: empty JSON in code, filled JSON in browserJAVA:代码中的空 JSON,浏览器中的填充 JSON
【发布时间】:2016-02-28 17:09:50
【问题描述】:

我正在尝试从 url 获取一个 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());

【问题讨论】:

  • 你有什么错误吗?
  • 尝试使用数据包嗅探器比较浏览器和应用程序的 http 请求(尤其是标头)。根据发送请求的应用程序,服务器的行为似乎有所不同。
  • 尝试为 url 编码查询参数值。
  • 你是对的,这就是问题所在,JAVA将查询转换为服务器无法识别的某种编码,当我转换它时,服务器识别它。非常感谢

标签: java json http


【解决方案1】:

解决方案是在将 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());
}

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

【讨论】:

    【解决方案2】:

    尝试像这样使用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);
         }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2017-07-28
      • 2011-04-01
      • 2013-04-04
      • 1970-01-01
      • 2017-03-20
      • 2020-10-04
      相关资源
      最近更新 更多