我正在尝试从DuckDuckGo API获得一些即时答案,但我一直收到错误403。这是到目前为止的代码:

    static JSONObject getData(String term){
    JSONParser parser = new JSONParser();
    JSONObject json = null;
    term = term.replaceAll(" ", "%20");

    try {
        URL ob=new URL("http://api.duckduckgo.com/?q=" + term + "&format=json&pretty=0");
        HttpURLConnection con=(HttpURLConnection) ob.openConnection();
        con.setRequestMethod("GET");
        con.setRequestProperty("USER_AGENT", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

        BufferedReader br = new BufferedReader((new InputStreamReader(con.getInputStream())));
        json = (JSONObject) parser.parse(br.readLine());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return json;
}


我似乎无法正常工作。我已经读过我需要与普通浏览器一样的身份,但是我看不出我在做什么错。有什么帮助吗?

最佳答案

我用HttpURLConnection获得了403(与您相同)。但是,当我使用URLConnection而不是HttpURLConnection时,它起作用了。由于可用性高,我只使用了org.json.simple解析器。 json对象在最后打印已解析的数据。

import java.io.*;
import java.net.*;
import java.util.*;

import org.json.simple.*;
import org.json.simple.parser.*;

public class HelloWorld{

  public static void main(String []args){

     try {
         JSONParser parser = new JSONParser();
         JSONObject json = null;
         URL url = new URL("http://api.duckduckgo.com/?q=science&format=json&pretty=0");
         URLConnection conn = url.openConnection();
         conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB;     rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");

         Scanner scn = new Scanner(conn.getInputStream()).useDelimiter("\\A");
         String buffer = scn.hasNext() ? scn.next() : "";
         json = (JSONObject) parser.parse(buffer);
         System.out.println(json.toString());

     } catch (Exception e) {
         e.printStackTrace();
     }
  }
}

关于java - http获取退货403,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39336084/

10-12 12:20