Avatar billede pjen2004 Nybegynder
27. september 2005 - 20:20 Der er 10 kommentarer og
1 løsning

Hente billedfil med HTTP - uden at bruge browser

Hejsa! Måske kan et klogt hoved hjælpe med følgende:

Jeg har en applikation udviklet i asp der kan hente kort fra en såkaldt WMS-server på Internettet. Det virker alt sammen helt fint. Lidt ligesom på siden http://kmswww3.kms.dk/kortpaanettet/

Det fungerer ved at spørge med en særlig sætning i browseren - og derefter får man smidt en jpg retur i browseren.

Men, - jeg kunne godt tænke mig, at bruge kortudsnittet (jpg-fil) i et andet program. Jeg kan ikke umiddelbart finde billedet jeg får fra browseren - og jeg vil gerne undgå at have browseren igang i det hele taget. Hvordan kan man ellers bruge HTTP-protokollen til at modtage et kort i form af at billede - og evt. selv bestemme hvor det skal lægges ned lokalt? Jeg har helt styr på, hvordan der skal spørges i en browser - men ikke hvordan gør man uden om den? Jeg er ret sikker på at det kan lade sig gøre - men aner ikke hvordan - eller hor jeg skal starte - da jeg mest har rodet med asp og browser-løsninger.
Avatar billede driis Nybegynder
27. september 2005 - 20:25 #1
Du kan bruge WinHTTP til at få serveren til at lave et HTTP request.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/winhttp_start_page.asp
Avatar billede driis Nybegynder
27. september 2005 - 20:28 #2
Server.CreateObject("WinHttp.WinHttpRequest.5")
eller
Server.CreateObject("WinHttp.WinHttpRequest.5.1")

Alt efter hvilken version du måtte have installeret på serveren.
Avatar billede pjen2004 Nybegynder
28. september 2005 - 08:12 #3
Så er spørgsmålet bare om det også kan bruges i VBA? Så vidt jeg lige umiddelbart kan se tager det udgangspunkt i C/C++ ... ?

Jeg har lavet en del små-programmer i VB - så det vil klart være at foretrække! Da jeg skal bruge det fra et andet program - som jeg ikke kan lave om på - forestiller jeg mig, at man kan kalde lave et kald som "hentfil.exe http://website/getfile/...." - hvorefter man så får smidt sin jpg-fil ned fra websiden i et valgt katalog. Måske skulle jeg i virkeligheden prøve i VB-afdelingen...
Avatar billede softspot Forsker
28. september 2005 - 19:28 #4
Den bruges i princippet på samme måde i VBA, VBScript og VB (bare med en lille varians i metoden hvormed du skaber komponenten, altså om du benytter New, CreateObject, eller Server.CreateObject afhænger bare af hvorfra du opretter objektet). Det kan da også godt være du skal benytte PROGID MSXML2.XMLHTTP i stedet for, men princippet er som sagt det samme.
Avatar billede driis Nybegynder
30. september 2005 - 17:31 #5
Jeg har ikke lige fulgt med de sidste par dage, men:

WinHTTP er et COM objekt som kan bruges i ASP/VBScript, C++ og alle andre steder hvor det er understøttet. Jeg kan godt lave et eksempel til dig hvis du er interesseret ?
Avatar billede pjen2004 Nybegynder
01. oktober 2005 - 11:37 #6
Det er jeg meget interesseret i! Jeg er ikke helt sikker på, at jeg forstår "Du kan bruge WinHTTP til at få serveren til at lave et HTTP request." ... Altså i alm. ASP laver jeg blot en streng som ser ud som f.eks.:

http://WEBSERVER_NAVN.dk/service?servicename=matrikelkort_01&service=WMS&version=1.1.1&IGNOREILLEGALLAYERS=true&LAYERS=Matrikelflader,Fredskov_linie,Fredskov_punkt,Udlagtvej,Kredse,Jordforurening_V1,Jordforurening_V2&SRS=EPSG:32632&REQUEST=GetMap&FORMAT=image/jpeg&TRANSPARENT=false&exceptions=application/vnd.ogc.se_inimage&BBOX=558626,6211136,558846,6211356&WIDTH=975&HEIGHT=514&login=XXXX&password=XXXX

Det sender en helt alm. JPG-fil tilbage i browseren. Det er denne jeg meget gerne vil have gemt i f.eks. c:\temp\opslag.jpg. Herefter kan jeg bruge filen i et andet program - der bare ved hvert opslag kan kigge i c:\temp\ efter opslag.jpg. Da jeg ikke vil bruge browseren - skal jeg bare have et lille VB-program til at lave HTTP-kaldet og gemme jpg'en.

I virkeligheden ret simpelt! Ikke?
Avatar billede driis Nybegynder
01. oktober 2005 - 18:19 #7
ASP eksempel (du kan selvfølgelig bare gemme ResponseBody til en fil istedet for at outputte til browseren):


Option Explicit
Dim whttp,strUrl
strUrl = "http://www.eksperten.dk/img/elogo.png"
Set whttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
whttp.Open "GET",strUrl
whttp.Send
' Skriver billedet til response Stream:
Response.ContentType = "image/png"
Response.BinaryWrite whttp.ResponseBody
Response.End
Avatar billede driis Nybegynder
01. oktober 2005 - 18:20 #8
Hvis du vil lave det som et VB program istedet for en ASP side (nu er spørgsmålet jo oprettet i ASP kategorien) er fremgangsmåden den samme. Der er et eksempel her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/retrieving_data_using_visual_basic.asp
Avatar billede pjen2004 Nybegynder
01. oktober 2005 - 18:48 #9
Hej! og mange tak!!!

Det ser ud til at være lige det jeg har brug for!!! Tester det lige og melder tilbage - så har du fuldt fortjent points'ene.
Avatar billede pjen2004 Nybegynder
02. oktober 2005 - 10:35 #10
YES! Det virker fint! eksemplet på Microsofts webside var perfekt! Læg et svar og jeg giver dig dine velfortjente points!
Avatar billede driis Nybegynder
02. oktober 2005 - 10:49 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester