2011-05-23 45 views
0

哇,我只是找不到任何可以工作的httpclient 4.1的例子,發送post請求但不是默認端口 但是可配置的端口,我有這個代碼但是它的dosn't工作Java 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) 

是簡單的詞如何定義端口?

+5

該代碼表示​​「未知主機」,沒有關於端口。該端口是URL的一部分。 'http://foo.com:8888'將嘗試連接到'8888'端口的'foo.com'。 – khachik 2011-05-23 12:17:05

+0

我知道它喜歡它不知道端口,所以我沒有把價值放在 新的HttpHost(url,port,httpType); – user63898 2011-05-23 12:21:55

+0

但這不是重點 - 在DNS中找不到主機,端口不相關。 – skaffman 2011-05-23 12:34:51

回答

3

您正試圖執行主機名https://foo.com 的查找,這就是問題;查找應該是針對foo.com。我不確定你是如何到達相關代碼的,但看看HttpClient tutorial需要一些時間。

如果我沒有錯,下面的代碼,應該足夠了:

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的其餘部分構造。

+0

你的意思是我必須建立完整的字符串https? https:// /..../? – user63898 2011-05-23 12:57:32

+0

是的,在[HttpClient]的示例頁面(http://hc.apache.org/httpcomponents-client-ga/examples.html)查看基於表單的登錄示例。 – 2011-05-23 12:59:09

+0

我看到他們都是這種方式我問的問題,方式沒有一些方法來設置端口像C cUrl,爲什麼我需要建立它的字符串它的愚蠢 – user63898 2011-05-23 13:02:03