I am trying to write a java based crawler which authenticates over https and then once authentication completes the client has to invoke an https request to upgrade the connection to websocket
Host: <host> User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Sec-WebSocket-Version: 13 Origin: <host> Sec-WebSocket-Extensions: permessage-deflate Sec-WebSocket-Key: VCrrJ5AAhB2cIg/xM2dgAA== Connection: keep-alive, Upgrade Pragma: no-cache Cache-Control: no-cache Upgrade: websocket
I am currently using org.eclipse.jetty.websocket->websocket-client. How can I issue a upgrade request similar to the above using the above library. My application has to be purely java, so I don't mind using any other alternate better java library.
If you use Tyrus ( Tyrus project ), you'll find (as stated in the Tyrus Documentation ) that you can use the custom configurator for the client and server endpoint. So in your ClientEndpoint annotated instance, you may use as annotation:
@ClientEndpoint(configurator = CustomClientConfigurator.class )
public class WSocketClnt {
[...]
}
Where the CustomClientConfigurator is something like:
public class CustomClientConfigurator extends ClientEndpointConfig.Configurator {
/**
* This method is called by the implementation after it has formulated the
* handshake request that will be used to initiate the connection to the
* server, but before it has sent any part of the request. This allows the
* developer to inspect and modify the handshake request headers prior to
* the start of the handshake interaction.
*
* @param headers the mutable map of handshake request headers the
* implementation is about to send to start the handshake interaction.
*/
@Override
public void beforeRequest(Map<String, List<String>> headers) {
headers.get("Connection").add("keep-alive"); // <-- This is only and example
[...]
}
/**
* This method is called by the implementation after it has received a
* handshake response from the server as a result of a handshake interaction
* it initiated. The developer may implement this method in order to inspect
* the returning handshake response.
*
* @param hr the handshake response sent by the server.
*/
@Override
public void afterResponse(HandshakeResponse hr) {
[...]
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.