Java Apache HttpClient错误:目标主机不能为null,也不能在参数中设置
我试图使用ApacheHttpClient从站点的API获取JSON响应,但它给了我一个“IllegalStateException:目标主机不能为null,也不能在参数中设置” Java代码:Java Apache HttpClient错误:目标主机不能为null,也不能在参数中设置,java,json,apache,http,httpclient,Java,Json,Apache,Http,Httpclient,我试图使用ApacheHttpClient从站点的API获取JSON响应,但它给了我一个“IllegalStateException:目标主机不能为null,也不能在参数中设置” Java代码: private String orderInURL = "https://r-test.ordr.in"; public String deliveryList(String datetime, String zip, String city, String addr) throws ClientPr
private String orderInURL = "https://r-test.ordr.in";
public String deliveryList(String datetime, String zip, String city, String addr) throws ClientProtocolException, IOException {
String listURL = orderInURL+"/dl/" + datetime + "/" + zip + "/" + city + "/" +
addr + "?_auth=1," + this.privateKey;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(URLEncoder.encode(listURL, "UTF-8"));
//header
getRequest.setHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
return output;
}
....
System.out.println(orderin.deliveryList("ASAP", "11111", "MyCity", "100 My Address"));
获取URL的结果是:
https://r-test.ordr.in/dl/ASAP/11111/MyCity/100%20My%20Address?_auth=1,XXXXXXXXXXXXXXXXX
如果您更换XXXXXXXXX。。。使用私钥。如果我只是复制这个URL并将其放在浏览器中,就会返回正确的JSON。我不知道为什么它不能在Java中返回正确的结果。非常感谢您的帮助。不确定问题出在哪里,但有一种更简单的方法可以从URL读取JSON。试着这样做:
public static String readJsonFromUrl(String url) throws IOException
{
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
return jsonText;
} finally {
is.close();
}
return "";
}
private static String readAll(Reader rd) throws IOException
{
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
rfc2616要求HTTP 1.1服务器拒绝没有主机头的HTTP请求,请参阅第14.23节。 在调用httpClient之前,请尝试添加以下行。执行:
getRequest.setHeader("host", "r-test.ordr.in");