Hi Simone,
Many thanks for your quick help.
I plan to change code as below. Could you please help check if it is correct?
...
HttpClient client = new HttpClient(clientTLSFactory);
client.setBindAddress(new InetSocketAddress("10.9.101.100", 0));
//local IP
client.setSocketAddressResolver(new SocketAddressResolver() {
@Override
public void resolve(String host, int port,
Promise<List<InetSocketAddress>> promise) {
try
{
//above host is the FQDN of remote https server after
SRV record resolving,
//in this example, it is "www.eclipse.org"
//DO DNS A/AAAA lookup for above host to get a list
of IPs
//select one IP from above IPs list according to some
rule,
// and assign this IP to host
host = <the selected IP>; //e.g, 198.41.30.198
InetAddress[] addresses =
InetAddress.getAllByName(host);
List<InetSocketAddress> result = new
ArrayList<>(addresses.length);
for (InetAddress address : addresses)
result.add(new InetSocketAddress(address, port));
if (result.isEmpty())
promise.failed(new UnknownHostException());
else
promise.succeeded(result);
}
catch (Throwable x)
{
promise.failed(x);
}
}
});
Request httpsreq =
client.newRequest("https://www.eclipse.org/jetty/")
.method(org.eclipse.jetty.http.HttpMethod.POST);
httpsreq.header(headerName, headerValue);
httpsreq.content(new BytesContentProvider("Hello Jetty"),
"application/json");
httpsreq.send(new Response.Listener.Adapter() { ......});
Regards,
William
-----Original Message-----
From: [email protected] <[email protected]> On
Behalf Of Simone Bordet
Sent: 2020年2月21日 17:00
To: JETTY user mailing list <[email protected]>
Subject: Re: [jetty-users] how does org.eclipse.jetty.client.HttpClient or
org.eclipse.jetty.client.api.Request set the IP for the socket connect
Hi,
On Fri, Feb 21, 2020 at 8:52 AM Cao, William (NSB - CN/Qingdao)
<[email protected]> wrote:
>
> Hi,
>
> I am using below codes to write a https client using Jetty 9.4.7.
>
> I use the FQDN kind of url https://www.eclipse.org/jetty/ to do newRequest, I
> checked the jetty code, and got that Jetty will use this url to create socket
> connection.
>
> We often have a requirement that the application need balance the IP resolved
> from FQDN and record the IP which can’t successfully be connected, and not
> depend on DNS server to do it. i.e., our application will do DNS/SRV lookup
> on www.eclipse.org in below example, there will be several IPs retrieved, our
> application will select one IP (e.g., 198.41.30.198 ) according to some rule,
> and then use this IP to build the socket, and the request still use FQDN kind
> of url https://www.eclipse.org/jetty/ as the request url, use FQDN
> www.eclipse.org:443 as the Host header.
>
> I can’t find the way to specify the remote InetSocketAddress with IP so as to
> build socket connection, could you please help with that?
>
> HttpClient client = new HttpClient(clientTLSFactory);
> InetSocketAddress localAddress = new
> InetSocketAddress("10.9.101.100", 0); //local host IP
> client.setBindAddress(localAddress);
>
> Request httpsreq httpsreq =
> client.newRequest("https://www.eclipse.org/jetty/")
> .method(org.eclipse.jetty.http.HttpMethod.POST);
>
> //Here I want to specify the IP for this request, to build the socket
> connection.
> //e.g., //httpsreq.setRemoteInetAddress(“198.41.30.198”);
>
> httpsreq.header(“Host”, “www.eclipse.org:443”);
> httpsreq.header(otherheaderName, headerValue); httpsreq.content(new
> BytesContentProvider("Hello Jetty"), "application/json");
>
> httpsreq.send(new Response.Listener.Adapter() { ......
> @Override
> public void onFailure(Response response, Throwable failure) {
> ...
> }
>
> @Override
> public void onSuccess(Response response) {
> ...
> }
> ......
> }
You want to use a custom SocketAddressResolver, so:
client.setSocketAddressResolver(new SocketAddressResolver() {
@Override
public void resolve(String host, int port, Promise<List<InetSocketAddress>>
promise) {
// Do your logic here.
}
}
Let us know if this worked for you.
--
Simone Bordet
----
http://cometd.org
http://webtide.com
Developer advice, training, services and support from the Jetty & CometD
experts.
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users