Italian Come chiamare un WebService https

Ebic

Member
Licensed User
Longtime User
Salve.
Ho costruito una app che esegue chiamate ad un webservice usando la classe httpJob.
Per ora tutto è funzionanate se uso una chiamata http, ma se provo a chiamare il servizio usando https
su un server predisposto al protocollo https il client non ottiene risposta.
La mia domanda come da titolo è : Come si può chiamare un WebService su protocollo https ?
Che metodo dovrei utilizzare?
Ringrazio in anticipo per le risposte

Enrico.
 

udg

Expert
Licensed User
Longtime User
Lato client è esattamente la stessa con l'unica accortezza di usare il protocollo https e la relativa porta aperta sul server.
Qualcosa tipo: "https://miosito.com:60207/hello2"

Si tratta di un tuo server o cerchi di accedere ad un webservice altrui?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Devi essere sicuro che stai utilizzando l'ultima versione della libreria OkHttpUtil2 perchè le versioni vecchie non supportano https
Su che versione di Android stai provando ??
Android 4.x non supporta TLS 1.1
 

Ebic

Member
Licensed User
Longtime User
Lato client è esattamente la stessa con l'unica accortezza di usare il protocollo https e la relativa porta aperta sul server.
Qualcosa tipo: "https://miosito.com:60207/hello2"

Si tratta di un tuo server o cerchi di accedere ad un webservice altrui?
Server mio, devo installarci il certificato e configurare iis per le chiamate https, giusto?
Grazie.
 

Ebic

Member
Licensed User
Longtime User
Devi essere sicuro che stai utilizzando l'ultima versione della libreria OkHttpUtil2 perchè le versioni vecchie non supportano https
Su che versione di Android stai provando ??
Android 4.x non supporta TLS 1.1
in realtà le app sono 2 sia B4i che B4A, però credo di avere installato le librerie più nuove, per Android no prob se non gira sui vecchi si arrangiano.
Grazie
 

3394509365

Active Member
Licensed User
Longtime User
Ebic, vorrei fare anche io qualcosa del genere, hai del codice di esempio da cui partire per esempio per la connessione

te ne sarei grato
Grazie
 

Ebic

Member
Licensed User
Longtime User
Ebic, vorrei fare anche io qualcosa del genere, hai del codice di esempio da cui partire per esempio per la connessione

te ne sarei grato
Grazie
Guarda ti passo questo blocco dove chiamo un web service (l'indirizzo è di fantasia) scritto in Vbnet predisposto a rispondere al
parametro di un codice (che vedi in "Query").
Il Servizio legge una tabella sql sul server e ritorna uno o più record relativo alla chiave passata.
la variabile xml include la chiamata Xml che passo al ws e deve ovviamente essere congruente con quello esposto lato server (attenzione che è case sensitive).
La cosa più complessa forse è la lettura della risposta che io ho risolto
nel modo che vedi nel blocco "try" e "for each...".
Il codice è regolarmente indentato e quindi di più facile lettura ma non so perchè nel quote schiaccia tutto a sinistra.
Ti allego anche il formato txt.

Spero ti sia utile.
B4X:
   Dim Query As String = "1234567890"
    Dim xml As String = $"<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
      <TWSelect xmlns="http://tempuri.org/">
      <Query>${Query}</Query>
    </TWSelect>
  </soap:Body>
</soap:Envelope>"$

    Dim j5 As HttpJob
    j5.Initialize("",Me)
    j5.PostString("https://2.3.4.5/WebServer.asmx",xml)
    j5.GetRequest.SetContentType("text/xml; charset=utf-8")
    j5.GetRequest.SetHeader("SOAPaction",$""http://tempuri.org/TWSelect""$)
    Try
        wait for (j5) JobDone(j5 As HttpJob)
        If j5.Success Then
            Dim xm2 As Xml2Map
            xm2.Initialize
            Dim root As Map=xm2.Parse(j5.GetString)
            Dim envelope As Map = root.Get("Envelope")
            Dim body As Map = envelope.Get("Body")
            Dim TWSelectResponse As Map = body.Get("TWSelectResponse")
            Dim TWSelectResult As Map = TWSelectResponse.Get("TWSelectResult")
            If TWSelectResult.Get("diffgram") Is Map Then
                Dim Diffgram As Map = TWSelectResult.Get("diffgram")
                Dim NewDataset As Map = Diffgram.Get("NewDataSet")
                Dim Dati As List = NewDataset.Get("Dati")
                Dim Tabella As List = Dati
                For Each Record As Map In Tabella
                    Log(Record.Get("ID_RECORD") & " <> " & Record.Get("Note") & " ")
                Next
            End If
        Else
            Log (j5.ErrorMessage)
            Return "Manca connessione con server." &  _
               "Non è possibile proseguire."
        End If
        j5.Release
        Return "OK"
    Catch
        Return "Manca connessione con Server."
    End Try
 

Attachments

  • Esempio.txt
    1.8 KB · Views: 167
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Il codice è regolarmente indentato e quindi di più facile lettura ma non so perchè nel quote schiaccia tutto a sinistra.
Prova a metterlo tra i tag [ Code ]

1614104277092.png
 
Top