Een adres aan de hand van een postcode opvragen.
Schijnbaar is simpels, maar ik blijf tegen deze vervelende fout aan lopen.
Wat doe ik niet goed?
Een testprojectje bijgevoegd.
Een gratis key kan je hier aanvragen
Peter
Een adres aan de hand van een postcode opvragen.
Schijnbaar is simpels, maar ik blijf tegen deze vervelende fout aan lopen.
Wat doe ik niet goed?
Een testprojectje bijgevoegd.
Een gratis key kan je hier aanvragen
Peter
10.4.2, Delphi2010, of Lazarus 2.2.0
Het starten van de communicatie met https gaat prima hier.
Maar aan jouw foutmelding te zien gebruik je geen (of niet de goede) openssl dll's.
Heb je die ook in je exe directory gezet ??
Maar bij mij loopt ie iets verder kapot met een bad gateway.
Nu zie ik dat jij een hele rare URL gebruikt met \ om extra headers mee te geven.
Moet dat in Indy niet met IdHttp1.Request.CustomHeaders.AddValue ??
Dus zoiets:
Delphi Code:
const Aanroep = 'https://api.postcodeapi.nu/v2/addresses/?postcode=%S&number=%S'; //... IdHttp1.Request.CustomHeaders.AddValue('accept', 'application/hal+json'); IdHttp1.Request.CustomHeaders.AddValue('x-api-key', Key); IdHTTP1.Get(Url, Resp); Resp.Position := 0; MemoResponse.Lines.LoadFromStream(Resp);
PS. Vergeet ook niet de position van die Resp op 0 te zetten voordat je deze met LoadFromStream in je memo zet (zoals ik boven laat zien). Anders werkt het niet. Bij mij werkt het prima.
Op deze site staat onder het kopje developers de aanroepen in veel populaire talen.
Die van Delphi ontbreekt, ik heb er een uitgezocht die er wel op pascal leek en ben gewoon begonnen...
Ik ga met jouw tips aan de slag, en kom er op terug.
Alvast bedankt,
Peter
10.4.2, Delphi2010, of Lazarus 2.2.0
Het heeft iets meer tijd genomen dat wat ik erin wilde steken, maar het werkt :-)
Het grootste probleem was Indy, ik heb deze geupgraded naar revisie versie 5434.
Verder wat slordigheden in de URL:
Trim(EdtPostcode.Text) maar laat een eventuele spatie tussen de cijfers en letters gewoon staan.
Aanroep = 'https://api.postcodeapi.nu/v2/addresses/?postcode=%S&number=%S'; hier moet wel een dubbele && staan, anders krijg je een number.
het slotje mag erop
Peter
10.4.2, Delphi2010, of Lazarus 2.2.0
Beste Wok,
ik ben ook bezig met die postcode Api en loop tegen hetzelfde probleem aan: alert handshake failure. Vreemd dat al mijn andere SSL verbindingen met mijn Indy versie wel goed gaan. Ik gebruik XE-6 en heb ook al de TRestClient geprobeerd. Zelfde probleem. Kun jij vertellen hoe je Indy hebt geupgraded naar versie 5423?
Als het goed is kun je de laatste (of de gewenste) versie uit de snapshots van Indy halen.
Welkom op NLDelphi trouwens.
Last edited by VideoRipper; 30-May-18 at 14:47.
TMemoryLeak.Create(Nil);
Hi VideoRipper,
bedankt! Ik had die site inderdaad ook al gevonden via Stackoverflow geloof ik. Alleen als ik de laatste Indy daarvan afhaal (Indy10_5460.zip) dan zie ik geen enkel verschil met de versie van die ik nu gebruik (10.6.0.5122). de bestanden die ik gebruik zoals bijv. idIOHandler.pas lijken ook allemaal ongewijzigd, met laatste wijziging in 2005. Het probleem doet zich nog steeds voor als ik deze Indy versie in de Delphi source plaats
Hier een stukje code wat werkt, dit was ooit een testje voor een project.
Wel zelf ff een key invullen.
10.4.2, Delphi2010, of Lazarus 2.2.0
Bedankt, maar hetzelfde probleem. Mijn code voor de aanroep is gewoon in orde, het ligt echt aan Indy. Ik ben alleen altijd al aan het klooien met installeren van nieuwe Indy versies. Daarom is mijn vraag eigenlijk hoe installeer ik ook alweer op een correcte manier een nieuwe Indy versie ik gebruik XE6, moet ik de Indy_200 packages hebben daarvoor, en de oude wegdoen?
Nu Indy versie 10.6.2.5460 geinstalleerd. Nog steeds zelfde probleem, ook met jouw voorbeeldapplicatie
Brtsch, Kan je jouw versie posten.
Dan kan ik een kijken of het hier ook problemen opleverd
10.4.2, Delphi2010, of Lazarus 2.2.0
Hoi Wok, dank voor het aanbod maar dat heeft echt geen zin, lijkt erg veel op jouw versie en die werkt hier ook niet. Steeds weer die handshake failure, misschien dat mijn open SSL DLL's versies niet goed zijn, maar ja andere server HTTPS requests gaan allemaal goed
Dat wil niets zeggen. Het kan best zijn dat de server die je nu aanspreekt een bepaalde versie van TLS vereist. En als je dan de verkeerde openssl hebt dan gaat dat niet lukken.
Pak gewoon eens de laatste van http://indy.fulgan.com/SSL/
Zorg ervoor dat je je bitness van de openssl match met die van je programm (32 bit bij 32 bit of 64 bit bij 64 bit). Zet alle bestanden uit de zip in je .exe directory en test het nog eens.
Ik heb de laatste versies geprobeerd 32 en 64 bit. Mijn applicatie is 32 bit op Windows 7 64 bit. Helaas zelfde foutmelding.
Het gaat wel goed als ik de gratis monitor applicatie "Fiddler" open en de optie "Decrypt HTTPS traffic aanzet", vervolgens de Indy ProxyParams als volgt instel:
idHTTP.ProxyParams.ProxyServer := '127.0.0.1';
idHTTP.ProxyParams.ProxyPort := 8888;
Als Fiddler dan open blijft staan krijg ik het verwachte resultaat te zien.
Kun je dan in Fiddler zien welke TLS versie gebruikt wordt?
Je zou de IdSSLIOHandlerSocketOpenSSL1.Method eens op sslvTLS1_2 kunnen zetten en de IdSSLIOHandlerSocketOpenSSL1.SSLVersions op [sslvTLS1_2].
Maar de api.postcodeapi.nu zou de TLS1.0 ook goed aan moeten kunnen.
Mmmmmmmm, dit geeft ook een "sslv3 alert handshake failure"
Volgens dit is het wel supportedCode:# openssl s_client -tls1_2 -connect api.postcodeapi.nu:443 CONNECTED(00000003) 139817320403008:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1399:SSL alert number 40
Als ik vervolgens wel de servername meegeef gaat het goed.Code:nmap --script ssl-enum-ciphers -p 443 api.postcodeapi.nu
Deze laatste optie geeft de "Server Name Indication" (SNI) mee.Code:# openssl s_client -servername api.postcodeapi.nu -connect api.postcodeapi.nu:443 CONNECTED(00000003) depth=3 C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2 verify return:1 depth=2 C = US, O = Amazon, CN = Amazon Root CA 1 verify return:1 depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon verify return:1 depth=0 CN = api.postcodeapi.nu verify return:1 --- Certificate chain 0 s:/CN=api.postcode etc....
https://github.com/IndySockets/Indy/issues/160
Maar dit zou al langer in Indy moeten zitten.
Geen idee waarom dit bij jou in Indy dan niet werkt.1/11/2016 - Client-side SNI support added to TIdSSLIOHandlerSocketOpenSSL
Client-side support for the TLS SNI extension has been added to TIdSSLIOHandlerSocketOpenSSL More... (link)
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks