Java httpclient 4.1, как отправить почтовый запрос с настраиваемым портом - PullRequest
1 голос
/ 23 мая 2011

ничего себе, я просто не могу найти ни одного работающего примера httpclient 4.1, чтобы отправить пост-запрос с портом не по умолчанию, а с настраиваемым портом, у меня есть этот код, но он не работает

// lHashMapParams is with params getting form function .. 

List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        for (String key : lHashMapParams.keySet()) {
            String val = lHashMapParams.get(key);
            params.add(new BasicNameValuePair(key,val));

}
String url = "https://foo.com";
int port = 8883;
String = "https";
UrlEncodedFormEntity query = new UrlEncodedFormEntity(params);
        HttpHost httpHost = new HttpHost(url,port,httpType); 

        HttpPost post = new HttpPost("/");
        post.setEntity(query);


        HttpResponse response_ = httpclient.execute(httpHost,post);

получение этогоисключение:

log4j:WARN Please initialize the log4j system properly.
java.net.UnknownHostException: https://foo.com
    at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1183)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1136)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1109)
    at java.net.InetAddress.getAllByName(InetAddress.java:1072)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:242)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:130)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
    at com.ut.HttpClientImpl.postHttpReqest(HttpClientImpl.java:75)  

- это простые слова, как определить порт?

1 Ответ

4 голосов
/ 23 мая 2011

Вы пытаетесь выполнить поиск имени хоста https://foo.com , и это проблема; поиск должен был быть против foo.com. Я не уверен относительно того, как вы пришли к рассматриваемому коду, но стоит потратить некоторое время на ознакомление с учебником по HttpClient .

Если я не ошибаюсь, следующего кода должно быть достаточно:

HttpPost httpost = new HttpPost(url); //construct the complete URL i.e. action to post to
httpost.setEntity(entity);
response = httpclient.execute(httpost);

где url должен быть создан со схемой http / https, именем хоста, портом и остальным URI ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...