2012-07-23 18 views
8

Sto scherzando con IBM worklight e sto provando a creare un adattatore per inserire alcuni dati dallo Google places API.Come fare richieste HTTPS con serveride javascript usando Worklight?

voglio chiamare questo 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 

L'esecuzione di questo URL funziona bene in un browser e visualizza qualche bel JSON che sto cercando di ottenere attraverso Worklight.

adattatori

il faro da lavoro sono creati in Javascript, questo è quello che ho finora:

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; 
    } 
} 

E questo è il risultato che ottengo nella console, quando prova quanto sopra:

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 

Penso che questo sia probabilmente causato dal fatto che l'adattatore richiede come HTTP, mentre dovrebbe usare HTTPS.

Se si modifica la richiesta di utilizzare HTTP in un browser, vengono visualizzati risultati simili.

Domanda: Posso fare una richiesta HTTPS modificando il Javascript sopra, o sto fraintendendo gli adattatori per fari da lavoro?

risposta

7

Sembra che googleapis non funzioni se non si specifica l'intestazione host all'interno della richiesta. Dopo aver aggiunto che tutto funziona come dovrebbe:

Questa è una sezione per gli adattatori XML

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

Questo è JS dell'adattatore:

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; 

}

+0

anche io ho un problema simile .. ho menzionato tutti i tipi di contenuti, ma non funziona affatto. – Sarath

+0

La descrizione dell'errore è "Il server ha rifiutato questa richiesta perché l'entità della richiesta è in un formato non supportato dalla risorsa richiesta per il metodo richiesto (Tipo di supporto non supportato) ".... ho specificato il Content-Type: 'application/json' .. ma il problema rimane presente .. – Sarath

2

l'adattatore v'è anche una {NOME ADATTATORE} .xml

In esso, sotto la connettività sotto connectionPolicy, v'è il protocollo. lo hai modificato in https e distribuito?

Problemi correlati