User Tools

Site Tools


Writing /app/www/public/data/meta/development/snmp/http-library.meta failed
development:snmp:http-library

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
development:snmp:http-library [2019/04/12 17:23] adsilvadevelopment:snmp:http-library [2021/06/25 10:09] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== HTTP Library ======
  
 + --- //[[avinash.dsilva@errigal.com|Avinash D'Silva]] 2019/04/12 09:25//
 +
 +The JavaHttpClient is a wrapper library developed as a part of R&D (in April 2019 IDMS-3748) so as to provide a HTTP client for our aging SnmpManager as it wasn't practical to upgrade the existing libraries.
 +
 +The JavaHttpClient was created to deal with the following primary challenges:
 +  - Allow connecting to web servers with bad SSL
 +  - Allow to connect(using curl fallback) to newer SSL ciphers/protocols (currently not supported in java 1.7)
 +  - Allow to post/patch/put raw JSON/binary (This was till now done through hacky workarounds)
 +  - Support reading and writing raw header information.
 +
 +
 +Example usage:
 +
 +
 +
 +<code groovy>
 +  import  com.errigal.snmpmanager.autodiscovery.http.*
 +
 +  String url = ""
 +  String body ="""{"hi":"bye"}"""  
 +  CustomHttpResponse chr = null 
 +  CustomHttpClient client = new JavaHttpClient()
 +  url = 'https://demo7260167.mockable.io/getTest'
 +  log.info "url: "+url
 +  chr = client.get(url,null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +
 +  url = 'https://demo7260167.mockable.io/optionsTest'
 +  log.info "url: "+url
 +  chr = client.options(url,null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +
 +  //head not testable
 +
 +  url = 'https://demo7260167.mockable.io/deleteTest'
 +  log.info "url: "+url
 +  chr = client.delete(url,null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +
 +  url = 'https://demo7260167.mockable.io/postTest'
 +  log.info "url: "+url
 +  chr = client.post(url,body.getBytes(),'text/html',null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +
 +  url = 'https://demo7260167.mockable.io/putTest'
 +  log.info "url: "+url
 +  chr = client.put(url,body.getBytes(),'text/html',null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +
 +  url = 'https://demo7260167.mockable.io/patchTest'
 +  log.info "url: "+url
 +  chr = client.patch(url,body.getBytes(),'text/html',null)
 +  log.info chr.dump()
 +  assert chr.success == true 
 +</code>
 +
 +JavaHttpClient falls to CurlHttpClient if it is unable to process due to SSL specific exceptions.
 +
 +
 +CustomHttpResponse has two convenience methods :
 +
 +There are some gotchas to remember due to the way RFC allows duplicate HTTP headers keys, 
 +The working is defined in the tests below
 +
 +1. getCookie 
 +
 +<code groovy>
 +
 +  void testResponse(){
 +    CustomHttpResponse customHttpResponse = new CustomHttpResponse()
 +    customHttpResponse.getHeaders().put("k0","v0")
 +    customHttpResponse.getHeaders().put("sEt-CoOkIe","v1=x")
 +    customHttpResponse.getHeaders().put("SET-COOKIE","v2=y")
 +    String cookie = customHttpResponse.getCookie("v2")
 +    assert cookie == "v2=y"
 +  }
 +
 +</code>
 +
 +
 +2. getHeader
 +
 +<code groovy>
 +
 +  void testGetHeader(){
 +    CustomHttpResponse customHttpResponse = new CustomHttpResponse()
 +    customHttpResponse.getHeaders().put("k0","v0")
 +    customHttpResponse.getHeaders().put("k1","v1")
 +    customHttpResponse.getHeaders().put("k1","v2")
 +    assert customHttpResponse.getHeader("k0") == "v0"
 +    assert customHttpResponse.getHeader("k1") == "v1"
 +
 +  }
 +
 +</code>