HttpClient URL调用失败

问题描述 投票:0回答:1

我试图从一台linux机器上对一个API进行Http POST。但是我对URL的调用出现了超时错误。我使用的是httpclient-4.5.8库。最初我的客户端服务器没有被列入白名单,所以我曾经从URL中得到 "403-Forbidden"。但是在白名单之后,出现了超时错误。

public void PostMessage() {     
    try {

        final RequestConfig params = RequestConfig.custom().setConnectTimeout(3000).setSocketTimeout(3000).build();
        httpPost = new HttpPost(getUri());
        log4.debug("URL set up done for "+ httpPost.getURI());
        final StringEntity entity = new StringEntity(getMessage());
        httpPost.setConfig(params);
        httpPost.setEntity(entity);
        httpPost.setHeader("Content-type", "application/json");


        CloseableHttpResponse response = (CloseableHttpResponse) client.execute(httpPost);
        log4.info("Response Code:" + response.getStatusLine().getStatusCode());
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line = "";
        while ((line = rd.readLine()) != null) {
            log4.info("Response Content:" + line);
        }
        } catch (IOException i) {
            log4.info("Error at PostClient.IOException. " + i.getMessage());
        } catch(Exception e) {
            log4.info("Error at PostClient.Exception. " + e.getMessage());
        }
}

日志跟踪。(请原谅我的遮挡)

"message": "URL设置完成,为 https:/ABCD.com", "logger": "com.tesco.ReceiptClient.PublishClient.ReceiptPostClient:PostMessage"

"message": "CookieSpec selected: default", "logger": "org.apache.http.client.protocol.RequestAddCookies:process"

"message": "上下文中未设置Auth缓存", "logger": "org.apache.http.client.protocol.RequestAuthCache:process"

"消息": "连接请求:[路由。{s}->https:/ABCD.com:443][共 Keep alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]", "logger": "org.apache.http.impl.conn.PoolingHttpClientConnectionManager:requestConnection"

"message": "连接已租用。[id:1][路由。{s}->https:/ABCD.com:443][共 Keep alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]", "logger": "org.apache.http.impl.conn.PoolingHttpClientConnectionManager:leaseConnection"

"消息": "打开连接{s}->https:/ABCD.com:443。", "logger": "org.apache.http.impl.execchain.MainClientExec:execute"

"message": "连接到ABCD.comxxx.xx.xx.x:443", "logger": "org.apache.http.impl.conn.DefaultHttpClientConnectionOperator:connect"

"message": "Connecting socket to ABCD.comxxx.xx.xx.x:443 with timeout 3000", "logger": "org.apache.http.conn.ssl.SSLConnectionSocketFactory:connectSocket"

"message": "http-outgoing-1: Shutdown connection", "logger": "org.apache.http.impl.conn.LoggingManagedHttpClientConnection:shutdown"

"message": "Connection discarded", "logger": "org.apache.http.impl.execchain.ConnectionHolder:abortConnection"

"message": "连接已释放。[id: 2][route: {s}->https:/ABCD.com:443][共 Keep alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]", "logger": "org.apache.http.impl.conn.PoolingHttpClientConnectionManager:releaseConnection"

"message": "Error at PostClient.IOException. 连接到ABCD.com:443 [ABCD.comxxx.xx.xx.x] 失败:连接已超时", "logger": "com.tesco.ReceiptClient.PublishClient.ReceiptPostClient:PostMessage"

java apache-httpclient-4.x
1个回答
0
投票

检查是否与服务器有连接(telnetping)。

通常你会得到 连接超时 当你与服务器没有任何连接时,会出现错误。阅读时间结束 如果服务器需要的时间比 "read-timeout "配置的时间长。

© www.soinside.com 2019 - 2024. All rights reserved.