Apache http帖子示例

时间:2014-04-15 11:09:44

标签: java apache httpclient

我对这个Apache http客户端很新。我有一个URL来对其中一个服务进行web服务调用。我成功执行了GET请求,但我试图用POST请求执行此操作,但我没有收到任何响应。我无法从实体获取内容。

我的网址:“https://maps.googleapis.com/maps/api/place/details/xml?reference=CoQBcQAAAEZ7yCju-0lhU7sZIBBe_On9jYImWzZ9Zt5rIg1tX6zaH02dHrQMHF1LFHY1_yUuXzsUf6m6-rrQJ8Ec_mGxBYtV85Wyb4anakaUi3QuZj7ygJXB3Fd5x69k_4UnDKMmEBNa410vbCXgQOGIkHCbNpcbC8ENxmVlUrqiifmdfuLgEhCtPATMhFRdsjuyAL_j__OEGhTnqujRRMYy_5-kxzcqCdMY4_1dbA&sensor=true&key=key1”;

这是用GET方法执行的。下面你可以看到我的代码。

public class HttpClientPostExample {
public static void main(String[] args) throws ClientProtocolException,
        IOException {
    String url = "https://maps.googleapis.com/maps/api/place/details/xml?";

    HttpClient client = HttpClientBuilder.create().build();
    // HttpRequest httpRequest = HttpsClientImpl.createRequest("Post", url);
    HttpPost httpPost = new HttpPost(url);

    List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
    nameValuePairList
            .add(new BasicNameValuePair(
                    "reference",
                    "CoQBcQAAAEZ7yCju-0lhU7sZIBBe_On9jYImWzZ9Zt5rIg1tX6zaH02dHrQMHF1LFHY1_yUuXzsUf6m6-rrQJ8Ec_mGxBYtV85Wyb4anakaUi3QuZj7ygJXB3Fd5x69k_4UnDKMmEBNa410vbCXgQOGIkHCbNpcbC8ENxmVlUrqiifmdfuLgEhCtPATMhFRdsjuyAL_j__OEGhTnqujRRMYy_5-kxzcqCdMY4_1dbA"));
    nameValuePairList.add(new BasicNameValuePair("sensor", "true"));
    nameValuePairList.add(new BasicNameValuePair("key",
            "AIzaSyBA0Hu3is9qIJ5v6NEuofigk0y-aQwqiP0"));
    httpPost.addHeader("User-Agent", "User-Agent");
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, "UTF-8"));
    HttpResponse response = client.execute(httpPost);
    System.out.println(response.getStatusLine().getStatusCode());

    Header[] headerArray = response.getAllHeaders();
    for (Header header : headerArray) {
        System.out.println("Header Name: " + header.getName()
                + " Header Value: " + header.getValue());
    }
}

任何人都可以帮助我。这是发出POST请求的正确方法...... ???

如何在触发/调用execute方法之前获取实际的URL ... ???

1 个答案:

答案 0 :(得分:1)

尝试从

更改client实例化技术
HttpClient client = HttpClientBuilder.create().build();

DefaultHttpClient client = new DefaultHttpClient();

要确保您的实体已被完全使用,请在显示响应标头之前拨打EntityUtils.consume(entity)

...
HttpResponse response = client.execute(httpPost);
EntityUtils.consume(response.getEntity());
Header[] headerArray = response.getAllHeaders();
for (Header header : headerArray) {
    System.out.println("Header Name: " + header.getName()
            + " Header Value: " + header.getValue());
}