2013-03-21 62 views
8

Tôi có tính năng Tự động hoàn thành/nhập trước trên Tìm kiếm cho trang web của mình. Tôi thấy rằng một số thời gian của họ là một ngoại lệ liên quan đến nó. Chúng tôi đang sử dụng máy chủ proxy.Điều gì gây ra HttpHostConnectException?

org.apache.http.conn.HttpHostConnectException: Connection to http://proxy.xyz.com:60 refused  

at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:159) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 
at com.xxx.dd.sone.integration.SearchDAO.getJSONData(SearchDAO.java:60) 
at com.xxx.dd.sone.integration.SearchDAO.searchAutoCompleteResults(SearchDAO.java:560) 
at com.xxx.dd.sone.presentation.util.SearchAutoCompleteUtil.doGet(SearchAutoCompleteUtil.java:26) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:845) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:352) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:236) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254) 
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163) 
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074) 
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512) 
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255) 
at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:22) 
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147) 
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119) 

Nguyên nhân: java.net.ConnectException: Kết nối từ chối

Dưới đây là làm thế nào tôi đã được mã hóa

public HashMap<String, Object> getJSONData(String url)throws Exception { 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpParams params = httpClient.getParams(); 
    try { 
     HttpConnectionParams.setConnectionTimeout(params, 10000); 
     HttpConnectionParams.setSoTimeout(params, 10000); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw e; 
    } 
    HttpHost proxy = new HttpHost(proxy.xyz.com, 60); 
    ConnRouteParams.setDefaultProxy(params, proxy); 
    URI uri; 
    InputStream data = null; 
     uri = new URI(url); 
     HttpGet method = new HttpGet(uri); 
     HttpResponse response=null; 
     try { 
     response = httpClient.execute(method); 
     }catch(Exception e) { 
      e.printStackTrace(); 
      throw e; 
     } 
     data = response.getEntity().getContent(); 
    Reader r = new InputStreamReader(data); 
    HashMap<String, Object> jsonObj = (HashMap<String, Object>) GenericJSONUtil.fromJson(r); 
    return jsonObj; 
} 

Bất kỳ một thể cho tôi biết lý do tại sao tôi đang nhận được ngoại lệ này chỉ có một số thời gian ? điều này có thể xảy ra khi yêu cầu tìm kiếm được thực hiện từ các ứng dụng Android vì trang web của chúng tôi không hỗ trợ yêu cầu đang được thực hiện từ các ứng dụng Android

+0

Máy chủ proxy của bạn có đang chạy trên cổng 60 không? Nếu không - điều đó sẽ dẫn đến kết nối từ chối tin nhắn. –

+0

Nó đang chạy trên cùng một cổng. Ngoại lệ này cũng không xảy ra mỗi lần. chỉ thỉnh thoảng thôi. – pushya

+0

Thật không may là bạn phải xem xét lý do proxy từ chối kết nối. Có thể là lỗi trong cấu hình proxy? –

Trả lời

19

Lỗi "kết nối bị từ chối" xảy ra khi bạn cố gắng mở TCP kết nối với một địa chỉ IP/cổng nơi không có gì hiện đang lắng nghe các kết nối. Nếu không có gì là lắng nghe, hệ điều hành ở phía máy chủ "từ chối" kết nối.

Nếu điều này xảy ra liên tục, sau đó giải thích rất có thể là (IMO):

  • server bạn đang nói chuyện ("proxy.xyz.com"/cổng 60) để được đi lên và xuống, HOẶC
  • có điều gì đó giữa khách hàng của bạn và proxy không liên tục gửi yêu cầu đến một máy chủ không hoạt động hoặc thứ gì đó.

Đây có phải là có thể là ngoại lệ này xảy ra khi một yêu cầu tìm kiếm được thực hiện từ các ứng dụng Android như trang web của chúng tôi không hỗ trợ một yêu cầu đang được thực hiện từ các ứng dụng Android.

Có vẻ như không. Bạn đã nói rằng thông báo ngoại lệ "kết nối bị từ chối" nói rằng đó là proxy từ chối kết nối, chứ không phải máy chủ của bạn. Bên cạnh đó nếu một máy chủ sẽ không xử lý một số loại yêu cầu, nó vẫn phải chấp nhận kết nối TCP để tìm ra yêu cầu là gì ... trước khi nó có thể từ chối nó.

+0

Chỉ cần xóa yêu cầu tìm kiếm sẽ đến một nhà cung cấp dịch vụ khác và chúng tôi đã triển khai dịch vụ của họ trên trang web của chúng tôi. Tất cả những gì chúng tôi làm là gửi yêu cầu từ người tiêu dùng và gửi đến nhà cung cấp dịch vụ tìm kiếm và hiển thị thông tin do họ gửi – pushya

+0

"có điều gì đó giữa khách hàng của bạn và proxy gửi liên tục tới một máy chủ không hoạt động hoặc một thứ gì đó "những gì bạn có nghĩa là bởi máy chủ không hoạt động? – pushya

+0

Một số máy chủ không phải là máy chủ proxy không mong đợi các yêu cầu kết nối đó; tức là nó không hoạt động như một proxy ... –

0

Trong trường hợp của tôi, sự cố đã bị thiếu 's' trong URL HTTP. Lỗi là: "HttpHostConnectException: Kết nối với someendpoint.com:80 [someendpoint.com/127.0.0.1] không thành công: Kết nối bị từ chối" Điểm kết thúc và IP rõ ràng được thay đổi để bảo vệ mạng.

Các vấn đề liên quan