Java Apache HttpClient错误:目标主机不能为null,也不能在参数中设置

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

我试图使用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 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");