[
https://issues.apache.org/jira/browse/HTTPCLIENT-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17398032#comment-17398032
]
neng xu commented on HTTPCLIENT-2167:
-------------------------------------
Hi Oleg
I have a problem to use Apache Http 5.1.
It is urgent for me. It is a challenge for me, but it may be an easy issue to
you.
static String userID="ADPTestSandbox\\Phoenix.API";
string passWd="xxxx";
Do basic Authentication.
With Apache 4.5. It works
06:57:10.198 [main] DEBUG org.apache.http.wire - http-outgoing-0 >>
"Authorization: Basic QURQRW1wbG95ZXJTZXJ2aWNlc1xQaG
9lbml4LkFQSTpHRmJDZjBnNUUy[\r][\n]"
With Apache 5.1. It does not work.
2021-08-12 07:03:33,481 DEBUG [org.apache.hc.client5.http.wire] http-outgoing-0
>> "Authorization: Basic Og==[\r][\n]"
Note: If the userId does not contains "\\". Both works.
What should I do with Apache 5.1?
Thank you in advance !!
Ed Xu
Enterprise Business Services Technology (EBST)-ECPR
> BasicHttpClientConnectionManager always close the socket connection
> --------------------------------------------------------------------
>
> Key: HTTPCLIENT-2167
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2167
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient (classic)
> Affects Versions: 5.1
> Reporter: neng xu
> Priority: Major
>
> Test Case:
> Created ClosableHttpClient with BasicHttpClientConnectionManager.
> Used the ClosableHttpClient object to do two post and all successful.
> The problem is keepAlive does not work and two posts create two socket
> connections.
> The second post does not reuse the socket created by first post .
>
> Fist post
> 2021-08-03 09:48:28,291 DEBUG
> [org.apache.hc.client5.http.impl.classic.InternalHttpClient] ex-00000001:
> preparing request execution
> .....
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager]
> Connection can be kept alive for 50 SECONDS
> response code: 200
> Second post
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.InternalHttpClient] ex-00000002:
> preparing request execution
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.InternalHttpClient] ex-00000002:
> preparing request execution
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.protocol.RequestAddCookies] Cookie spec selected:
> strict
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.protocol.RequestAddCookies] Cookie spec selected:
> strict
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.protocol.RequestAuthCache] Auth cache not set in
> the context
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.protocol.RequestAuthCache] Auth cache not set in
> the context
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.ProtocolExec] ex-00000002: target
> auth state: UNC
> HALLENGED
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.ProtocolExec] ex-00000002: proxy
> auth state: UNCH
> ALLENGED
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.ConnectExec] ex-00000002: acquiring
> connection wi
> th route \{s}->https://ecpr-et.wellsfargo.com:4444
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.InternalHttpClient] ex-00000002:
> acquiring endpoi
> nt (50 SECONDS)
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager] Get
> connection for r
> oute \{s}->https://ecpr-et.wellsfargo.com:4444
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager] Closing
> connection G
> RACEFUL
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.io.DefaultManagedHttpClientConnection]
> http-outgoing-0: c
> lose connection GRACEFUL
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.InternalHttpClient] ex-00000002:
> acquired endpoin
> t InternalConnectionEndpoint-58aa1698
> 2021-08-03 09:48:28,868 DEBUG
> [org.apache.hc.client5.http.impl.classic.ConnectExec] ex-00000002: opening
> connection \{s}-
> >[https://ecpr-et.wellsfargo.com:4444|https://ecpr-et.wellsfargo.com:4444/]
> ................
> Note: Above trace showed that second post will close previous socket when
> "Get connection for route \{s}->https://ecpr-et.wellsfargo.com:4444"
> Did debug and saw the issue at follow method. of
> BasicHttpClientConnectionManager class
> synchronized ManagedHttpClientConnection getConnection(final HttpRoute route,
> final Object state) throws IOException {
> ..................
> Asserts.check(!this.leased, "Connection is still allocated");
> if (!LangUtils.equals(this.route, route) || !LangUtils.equals(this.state,
> state)) {
> closeConnection(CloseMode.GRACEFUL);
> }
> ..................
> return this.conn;
> }
> Bug is at line: "if (!LangUtils.equals(this.route, route) ||
> !LangUtils.equals(this.state, state)) {"
> For stateless HTTP call, the state is always null, LangUtils.equal() always
> returns false.
> That line is always true even first post and second post has same route.
> Therefore, it always call "closeConnection(CloseMode.GRACEFUL);" to close the
> previous socket connection although it meets keepAlive requirement.
>
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]