我试图从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;
}
我似乎无法让它发挥作用。我已经读过我需要将其视为普通浏览器,但我不知道自己做错了什么。对此有何帮助?
答案 0 :(得分:1)
我用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();
}
}
}