How to make HTTPS requests using server-side javascript using Worklight?

I work with IBM worklight and try to create an adapter to feed some data from Google hosted API .

I want to name this URL:

https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM&location=52.0700,1.1400&radius=10000&sensor=false&name=coffee 

Executing this URL works fine in the browser and displays the good JSON I'm trying to get through Worklight.

Worklight adapters are created in Javascript, this is what I still have:

 function getCoffeeHouses() { var input = { method : 'get', returnedContentType : 'json', path : 'maps/api/place/search/json', parameters : { 'key' : 'AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM', 'location' : '52.0700,1.1400', 'radius' : '10000', 'sensor' : 'false', 'name' : 'coffee' } }; var response = WL.Server.invokeHttp(input); // Extract latitude and longitude from the response. var type = typeof response; if ("object" == type) { if (true == response["isSuccessful"]) { // Return JSON object with lat and lng. return response["results"]; } else { // Returning null. Web request was not successful. return null; } } else { // Returning null. Response is not an object. return null; } } 

And this is the result that I get in the console when I test above:

 Failed to parse JSON string <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 404 (Not Found)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}} </style> <a href=//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a> <p><b>404.</b> <ins>That's an error.</ins> <p>The requested URL <code>/maps/api/place/search/json?key=AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM&amp;location=52.0700%2C1.1400&amp;radius=10000&amp;sensor=false&amp;name=coffee</code> was not found on this server. <ins>That's all we know.</ins> Caused by: java.io.IOException: Unexpected character '<' on line 1, column 1 [2012-07-23 11:08:57] An error occurred while invoking procedure CoffeeFinder/getCoffeeHouses parameters: { "arr": [ ] } null Caused by: null 

I think this is probably due to the adapter requesting HTTP, whereas it should use HTTPS.

If I change the request to use HTTP in the browser, it displays similar results.

Question: can I make an HTTPS request by changing the above Javascript, or am I misunderstanding the adapters for flashlights?

+8
javascript ibm-mobilefirst google-places-api
source share
2 answers

It seems that googleapis will not work unless you specify the Host header inside your request. After the addition, everything works as it should:

This is the section of XML adapters

 <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>https</protocol> <domain>maps.googleapis.com</domain> <port>443</port> </connectionPolicy> <loadConstraints maxConcurrentConnectionsPerNode="2" /> </connectivity> 

This is the JS adapter:

 function doGet() { var input = { method : 'get', returnedContentType : 'json', path : 'maps/api/place/search/json', headers: { Host: 'maps.googleapis.com' }, parameters : { 'key' : 'AIzaSyCTlPms1pvhzeoRrBao5qW-DJMI_CWcbAM', 'location' : '52.0700,1.1400', 'radius' : '10000', 'sensor' : 'false', 'name' : 'coffee' } }; var response = WL.Server.invokeHttp(input); return response; 

}

+7
source

your adapter also has {ADAPTER NAME} .xml

In it, when connected to connectionPolicy, there is a protocol. did you change it to https and deploy it?

+2
source

All Articles