首先,Google说:“本节总结了可以与JSON / Atom Custom Search API一起使用的查询参数。所有参数值都需要进行 URL 编码。https://developers.google.com/custom-search/v1/using_rest#query-params这意味着“?”后面的所有内容都应该使用php url编码器的等效项进行编码,该编码器为urlencoding设定了标准。问题是Java的类URLEncoder不太对,你必须做几个替换All的。您需要对输入执行以下操作:
String queryArguments = "key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30";
请注意数字两边是如何用引号括起来的。如果从变量中获取这些内容,请使用以下命令:
String thenum = Integer.toString(theinteger);
然后进行正确的编码
String addition = URLEncoder.encode(queryArguments, "UTF-8")
.replaceAll("\\%28", "(")
.replaceAll("\\%29", ")")
.replaceAll("\\+", "%20")
.replaceAll("\\%27", "'")
.replaceAll("\\%21", "!")
.replaceAll("\\%7E", "~");
然后将其添加到原始的未编码网址中:
String url = "https://www.googleapis.com/customsearch/v1?"
String total = url + addition;
总之,您的代码将如下所示:
String query = URLEncoder.encode("key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30"), "UTF-8").replaceAll("\\%28", "(")
.replaceAll("\\%29", ")")
.replaceAll("\\+", "%20")
.replaceAll("\\%27", "'")
.replaceAll("\\%21", "!")
.replaceAll("\\%7E", "~");
URL url = new URL("https://www.googleapis.com/customsearch/v1?" + query);
HttpURLConnection conn2 = (HttpURLConnection) url.openConnection();
System.out.println("Connection opened!");
conn2.setRequestMethod("GET");
conn2.setRequestProperty("Accept", "application/json");
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn2.getInputStream())));
我希望这对你有用。我对旧的已弃用的图像api做了非常相似的事情,但概念是相同的,我查看了新的文档。:)
编辑:请确保您的 num 参数介于 0 和 10 之间(包括 0 和 10)。