【问题标题】:Paypal HttpHostConnectException贝宝 HttpHostConnectException
【发布时间】:2015-03-14 23:41:24
【问题描述】:

我在设置 Paypal 时遇到了一点问题,而且似乎一直在收到 HttpHostConnectException(请参阅下面的完整堆栈跟踪)我虽然这可能是防火墙的问题,但网络团队已经保证他们允许该地址通过防火墙。那么有人对可能导致此问题的原因有任何建议吗?

org.apache.http.conn.HttpHostConnectException: Connect to api-3t.sandbox.paypal.com:443 [api-3t.sandbox.paypal.com/173.0.82.83] failed: Connection timed out: connect
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:140)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
at uk.co.cdl.webclient.servicefacade.payment.PaypalPaymentService.paypalHttpCall(PaypalPaymentService.java:192)
at uk.co.cdl.webclient.servicefacade.payment.PaypalPaymentService.registerPaypalExpressCheckoutTransaction(PaypalPaymentService.java:125)
at uk.co.cdl.webclient.model.paypal.RegisterPaypalPayment.doPost(RegisterPaypalPayment.java:41)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:239)
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:123)
... 31 more

这是我的请求的 Java 代码

public HashMap<String, String> paypalHttpCall(final String methodName, List<NameValuePair> nvps) {
    String responseText = "";
    HashMap<String, String> responseNvp = null;

    CloseableHttpClient httpClient = HttpClientHelper.getDefaultHttpClient(30000);
    Status status = Status.HEALTHY;
    String description = "Paypal Connection Successful";

    addPostParameterIfNotEmpty(nvps, Paypal.METHOD, methodName);
    addPostParameterIfNotEmpty(nvps, "VERSION", this.paypalEndpointVersion);
    addPostParameterIfNotEmpty(nvps, "PWD", this.paypalPassword);
    addPostParameterIfNotEmpty(nvps, "USER", this.paypalUsername);
    addPostParameterIfNotEmpty(nvps, "SIGNATURE", this.paypalSignature);
    CloseableHttpResponse postResponse = null;      
    try {
        super.transactionStart();

        /* getExternalURL() returns https://api-3t.sandbox.paypal.com/nvp
         *
         */
        if (!UrlHelper.isAValidFullURL(getExternalURL())) {
            // shouldn't happen, but we're toasted if it does, so don't even try
            throw new IllegalArgumentException("bad url: "+getExternalURL());
        }

        final HttpPost httpPost = new HttpPost(getExternalURL());
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
        postResponse = httpClient.execute(httpPost); // Connection timeout here

    } catch (IOException ioe) {
        status = Status.DEAD;
        description = "We through an IOException so something bad has happened.";
        ioe.printStackTrace();
    } finally {
        super.transactionFinish(status, description);
    }

    return responseNvp;
}

【问题讨论】:

  • 你能证明网络团队的说法吗? (他们是给你看的还是告诉你的?)例如您是否能够从程序执行的环境中访问和 ping 有问题的地址?我并不是说网络团队在撒谎或做得不好,但有时会发生粗心的错误,有时会发生沟通不畅。
  • 他们确定它已被添加。这似乎很奇怪,因为我现在可以在浏览器中点击它,但不能在我的代码中点击它,但它通过相同的请求发送。
  • 这很奇怪。碰巧您是否在本地部署了应用程序?如果它是远程部署的,那么网络团队可能已经为您的本地机器打开了连接,但没有为部署应用程序的机器打开连接。
  • 它在我的机器上本地运行
  • 如何在浏览器中测试它?

标签: java paypal paypal-sandbox


【解决方案1】:

根据评论部分与 OP 的讨论,我很确定这是防火墙问题。无论目标是 google 还是 paypal,都无法通过 telnet 与端口 443 连接。

this answer 中找到的这张图表在您遇到这样的问题时非常有用:

【讨论】:

  • 我很高兴用 250 分奖励你,因为你帮了我很大的忙,但我只是等待我发回给我们的网络团队的日志回来看看他们说什么,但现在 +1。
  • 请注意:在任何情况下都不要使用 Telnet 来验证与 PayPal API 端点或其他 IP 地址的连接。 因为 Telnet 不支持 SSL,也不支持确认 SSL 握手,这可能会触发 PayPal 端的临时黑名单,使故障排除进一步复杂化。请改用 CURL 或 OpenSSL。来源:ppmts.custhelp.com/app/answers/detail/a_id/733
  • @PayPal_Martin 不启动 SSL 握手。 SSL 的客户端进行启动:确认,或者说响应,由服务器完成。文件有误。
  • 从技术上讲,应该修改该解释 - 消息保持不变。如果我们有一个传入的 TCP 连接,并且之后没有进行 SSL 握手,那么原始 IP 地址最终将被阻止。
  • 原来防火墙仍在阻止我,但后来我们发现我们也被代理阻止了,所以谢谢,享受他们花得值的 250 分。
猜你喜欢
  • 2011-07-25
  • 2011-02-21
  • 2014-09-06
  • 1970-01-01
  • 2020-11-08
  • 2020-01-31
  • 2013-04-19
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多