WinHTTP (mit SSL) für Memory, String und File Download

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
VoSs2o0o
Beiträge: 25
Registriert: 29.08.2004 16:58
Kontaktdaten:

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von VoSs2o0o »

Wohl eher

Code: Alles auswählen

Procedure CallBackHTTPProgress(CallbackID, lBytesReceived, lSize, lElapsedTime)
  Debug "Bytes" + Str(lBytesReceived)
  Debug "Size" + Str(lSize)
  ProcedureReturn 1
EndProcedure

Debug ReceiveHTTPString("http://www.google.de/", "GET", 0, "", "", "", "", "", 1, 0, @CallBackHTTPProgress(), 0)
...um mal ein funktionierendes Beispiel zu bringen.....
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von mk-soft »

Bei VB2005 muss eine Callback Routine deklariert werden...

zum Beispiel aus meine PBOPC.DLL:

Code: Alles auswählen

Module PB

    Public Delegate Function MyCallback(ByVal szReasion As Int32) As Int32

    Declare Unicode Function OpcSetShutdownCallBack Lib "PBOPC.dll" (ByVal ShutdownObject As Int32, ByVal Callback As MyCallback) As Int32 ' Return Old Callback Address

...

Module fct
    Public IsShutdown As Boolean

    Public Function MyCallback(ByVal szReasion As Int32) As Int32

        Form1.ListBox.Items.Add("Shutdown erkannt")
        IsShutdown = True
        My.Application.DoEvents()

    End Function

Muss bei VB6 auch ähnlich gemacht werden.

FF :wink:

P.S. Beim setzen der Callback...

Code: Alles auswählen

' Opc Set Callback
        fct.WriteLog("OPC Set Callback...")
        result = PB.OpcSetShutdownCallBack(shutdown, AddressOf fct.MyCallback)
        fct.WriteLog("Ok.  OldCallback=" & result)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Thorsten1867 »

Nachdem die "winhttp.dll" nun Bestandteil von Windows zu sein scheint, wäre es vermutlich sinnvoll den Code entsprechend zu ändern.
Es wäre toll, wenn jemand mit mehr LIB und DLL Erfahrung als ich sich dessen annehmen könnte.
Vermutlich ist es ganz einfach, wenn man weiß, wie es geht. :wink:
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Thorsten1867 »

Ich habe dann mal versucht die Include-Datei auf die Verwendung der in Windows vorhandenen DLL (winhttp.dll) anzupassen:

Code: Alles auswählen

;/ =========================================
;/ WinHTTP - 2009 by mback2k
;/ Lib -> DLL - 2012 by Thorsten Hoeppner
;/ =========================================

;{ Konstanten
#INTERNET_SCHEME_HTTP                   = 1
#INTERNET_SCHEME_HTTPS                  = 2
#INTERNET_DEFAULT_HTTP_PORT             = 80
#INTERNET_DEFAULT_HTTPS_PORT            = 443
  
#WINHTTP_NO_PROXY_NAME                  = 0
#WINHTTP_NO_PROXY_BYPASS                = 0
#WINHTTP_NO_REFERER                     = 0
#WINHTTP_NO_HEADER_INDEX                = 0
#WINHTTP_DEFAULT_ACCEPT_TYPES           = 0
#WINHTTP_ACCESS_TYPE_DEFAULT_PROXY      = 0
#WINHTTP_HEADER_NAME_BY_INDEX           = 0
  
#WINHTTP_AUTH_TARGET_SERVER             = 0
#WINHTTP_AUTH_TARGET_PROXY              = 1
  
#WINHTTP_AUTH_SCHEME_BASIC              = 1
#WINHTTP_AUTH_SCHEME_NTLM               = 2
#WINHTTP_AUTH_SCHEME_PASSPORT           = 4
#WINHTTP_AUTH_SCHEME_DIGEST             = 8
#WINHTTP_AUTH_SCHEME_NEGOTIATE          = 16
  
#WINHTTP_OPTION_REDIRECT_POLICY                         = 88
#WINHTTP_OPTION_REDIRECT_POLICY_NEVER                   = 0
#WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP  = 1
#WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS                  = 2
  
#WINHTTP_QUERY_STATUS_CODE              = 19
#WINHTTP_QUERY_RAW_HEADERS_CRLF         = 22
#WINHTTP_QUERY_CONTENT_ENCODING         = 29
#WINHTTP_QUERY_LOCATION                 = 33
#WINHTTP_QUERY_FLAG_NUMBER              = $20000000
  
#WINHTTP_OPTION_USERNAME                = $1000
#WINHTTP_OPTION_PASSWORD                = $1001
  
#WINHTTP_FLAG_REFRESH                   = $00000100
#WINHTTP_FLAG_SECURE                    = $00800000
  
#WINHTTP_ADDREQ_FLAG_ADD                = $20000000
;}

;{ Prototypes
Prototype  WinHttpAddRequestHeaders(hRequest, pwszHeaders.p-unicode, dwHeadersLength.l, dwModifiers.l)
Prototype  WinHttpCloseHandle(hInternet)
Prototype  WinHttpConnect(hSession, pswzServerName.p-unicode, nServerPort.l, dwReserved.l)
Prototype  WinHttpCrackUrl(pwszUrl.p-unicode, dwUrlLength.l, dwFlags.l, *lpUrlComponents)
Prototype  WinHttpOpen(pwszUserAgent.p-unicode, dwAccessType.l, *pwszProxyName, *pwszProxyBypass, dwFlags.l)
Prototype  WinHttpOpenRequest(hConnect, pwszVerb.p-unicode, pwszObjectName.p-unicode, *pwszVersion, *pwszReferrer, *ppwszAcceptTypes, dwFlags.l)
Prototype  WinHttpQueryDataAvailable(hRequest, *lpdwNumberOfBytesAvailable)
Prototype  WinHttpQueryHeaders(hRequest, dwInfoLevel.l, *pwszName, *lpBuffer, *lpdwBufferLength, *lpdwIndex)
Prototype  WinHttpReadData(hRequest, *lpBuffer, dwNumberOfBytesToRead.l, *lpdwNumberOfBytesRead)
Prototype  WinHttpReceiveResponse(hRequest, *lpReserved)
Prototype  WinHttpSendRequest(hRequest, pwszHeaders.p-unicode, dwHeadersLength.l, *lpOptional, dwOptionalLength.l, dwTotalLength.l, dwContext.l)
Prototype  WinHttpSetCredentials(hInternet, AuthTargets.l, AuthScheme.l, pwszUserName.p-unicode, pwszPassword.p-unicode, *pAuthParams)
Prototype  WinHttpSetOption(hInternet, dwOption.l, *lpBuffer, dwBufferLength.l)

Prototype ReceiveHTTPStart(CallbackID, hRequest)
Prototype ReceiveHTTPProgress(CallbackID, lBytesReceived, lSize, lElapsedTime)
Prototype ReceiveHTTPEnd(CallbackID, lRetVal, lBytesReceived, lSize, lElapsedTime)
;}

;{ Variablen
Global WinHttpAddRequestHeaders.WinHttpAddRequestHeaders
Global WinHttpCloseHandle.WinHttpCloseHandle
Global WinHttpConnect.WinHttpConnect
Global WinHttpCrackUrl.WinHttpCrackUrl
Global WinHttpOpen.WinHttpOpen
Global WinHttpOpenRequest.WinHttpOpenRequest
Global WinHttpQueryDataAvailable.WinHttpQueryDataAvailable
Global WinHttpQueryHeaders.WinHttpQueryHeaders
Global WinHttpReadData.WinHttpReadData
Global WinHttpReceiveResponse.WinHttpReceiveResponse
Global WinHttpSendRequest.WinHttpSendRequest
Global WinHttpSetCredentials.WinHttpSetCredentials
Global WinHttpSetOption.WinHttpSetOption
;}


Procedure.i WinHttp_LoadDLL()
  ; Generated with PureDLLHelper, Copyright ©2012 by Thomas <ts-soft> Schulz
  Protected hDLL.i
  hDLL = OpenLibrary(#PB_Any, "winhttp.dll")
  If hDLL <> 0
    WinHttpAddRequestHeaders = GetFunction(hDLL, "WinHttpAddRequestHeaders")
    WinHttpCloseHandle = GetFunction(hDLL, "WinHttpCloseHandle")
    WinHttpConnect = GetFunction(hDLL, "WinHttpConnect")
    WinHttpCrackUrl = GetFunction(hDLL, "WinHttpCrackUrl")
    WinHttpOpen = GetFunction(hDLL, "WinHttpOpen")
    WinHttpOpenRequest = GetFunction(hDLL, "WinHttpOpenRequest")
    WinHttpQueryDataAvailable = GetFunction(hDLL, "WinHttpQueryDataAvailable")
    WinHttpQueryHeaders = GetFunction(hDLL, "WinHttpQueryHeaders")
    WinHttpReadData = GetFunction(hDLL, "WinHttpReadData")
    WinHttpReceiveResponse = GetFunction(hDLL, "WinHttpReceiveResponse")
    WinHttpSendRequest = GetFunction(hDLL, "WinHttpSendRequest")
    WinHttpSetCredentials = GetFunction(hDLL, "WinHttpSetCredentials")
    WinHttpSetOption = GetFunction(hDLL, "WinHttpSetOption")
    ProcedureReturn hDLL
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure ReceiveHTTPMemory(url$, RequestType$ = "GET", ReturnHeader = #False, Username$ = "", Password$ = "", HeaderData$ = "", OptionalData$ = "", UserAgent$ = "WinHTTP - PureBasic", CallbackID = 0, CallbackStart.ReceiveHTTPStart = 0, CallbackProgress.ReceiveHTTPProgress = 0, CallbackEnd.ReceiveHTTPEnd = 0)
  Protected lpUrlComponents.URL_COMPONENTS\dwStructSize = SizeOf(URL_COMPONENTS)
  Protected lStatusCode.l, lContentLen.l, lRedirectPolicy.l = #WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS, lLongSize.l = SizeOf(Long)
  Protected hInternet, hConnect, hRequest, lRetVal, lBytesRead, lReadUntilNow, lBufSize, lStartTime, lResult
  Protected lPort, lFlags, sDomain$, sPath$, sQuery$, *OptionalBuffer, OptionalLength, *MemoryBuffer, MemoryLength
  Static hSession
  
  lStartTime = ElapsedMilliseconds()
  lpUrlComponents\dwSchemeLength = -1
  lpUrlComponents\dwHostNameLength = -1
  lpUrlComponents\dwUrlPathLength = -1
  lpUrlComponents\dwExtraInfoLength = -1
  
  If WinHttpCrackUrl(URLEncoder(url$), #Null, #Null, @lpUrlComponents)
    Select lpUrlComponents\nScheme
      Case #INTERNET_SCHEME_HTTP
        lPort = #INTERNET_DEFAULT_HTTP_PORT
        lFlags = #WINHTTP_FLAG_REFRESH
      Case #INTERNET_SCHEME_HTTPS
        lPort = #INTERNET_DEFAULT_HTTPS_PORT
        lFlags = #WINHTTP_FLAG_REFRESH | #WINHTTP_FLAG_SECURE
    EndSelect
    
    If lPort And lFlags
      If lpUrlComponents\lpszHostName And lpUrlComponents\dwHostNameLength
        sDomain$ = PeekS(lpUrlComponents\lpszHostName, lpUrlComponents\dwHostNameLength, #PB_Unicode)
      EndIf
      If lpUrlComponents\lpszUrlPath And lpUrlComponents\dwUrlPathLength
        sPath$ = PeekS(lpUrlComponents\lpszUrlPath, lpUrlComponents\dwUrlPathLength, #PB_Unicode)
      EndIf
      If lpUrlComponents\lpszExtraInfo And lpUrlComponents\dwExtraInfoLength
        sQuery$ = PeekS(lpUrlComponents\lpszExtraInfo, lpUrlComponents\dwExtraInfoLength, #PB_Unicode)
      EndIf
      
      If sDomain$ And sPath$
        If Not hSession
          hSession = WinHttpOpen(UserAgent$, #WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, #WINHTTP_NO_PROXY_NAME, #WINHTTP_NO_PROXY_BYPASS, 0)
        EndIf
        If hSession
          hInternet = WinHttpConnect(hSession, sDomain$, lPort, #Null)
          If hInternet
            hRequest = WinHttpOpenRequest(hInternet, RequestType$, sPath$+sQuery$, #Null, #WINHTTP_NO_REFERER, #WINHTTP_DEFAULT_ACCEPT_TYPES, lFlags)
            If hRequest
              If StringByteLength(OptionalData$, #PB_UTF8)
                *OptionalBuffer = AllocateMemory(StringByteLength(OptionalData$, #PB_UTF8)+1)
              EndIf
              If *OptionalBuffer
                OptionalLength = MemorySize(*OptionalBuffer)
                PokeS(*OptionalBuffer, OptionalData$, OptionalLength, #PB_UTF8)
                OptionalLength - 1
              EndIf
              If lpUrlComponents\nScheme = #INTERNET_SCHEME_HTTP
                WinHttpSetOption(hRequest, #WINHTTP_OPTION_REDIRECT_POLICY, @lRedirectPolicy, SizeOf(Long))
              EndIf
              If Len(Username$)
                WinHttpSetCredentials(hRequest, #WINHTTP_AUTH_TARGET_SERVER, #WINHTTP_AUTH_SCHEME_BASIC, Username$, Password$, #Null)
              EndIf
              If WinHttpAddRequestHeaders(hRequest, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"+#CRLF$, -1, #WINHTTP_ADDREQ_FLAG_ADD)
                WinHttpAddRequestHeaders(hRequest, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"+#CRLF$, -1, #WINHTTP_ADDREQ_FLAG_ADD)
                WinHttpAddRequestHeaders(hRequest, "Accept-Language: en-us,en-gb;q=0.9,en;q=0.8,*;q=0.7"+#CRLF$, -1, #WINHTTP_ADDREQ_FLAG_ADD)
              EndIf
              If RequestType$ = "POST"
                WinHttpAddRequestHeaders(hRequest, "Content-Type: application/x-www-form-urlencoded"+#CRLF$, -1, #WINHTTP_ADDREQ_FLAG_ADD)
              EndIf
              If CallbackStart
                CallbackStart(CallbackID, hRequest)
              EndIf
              If WinHttpSendRequest(hRequest, HeaderData$, Len(HeaderData$), *OptionalBuffer, OptionalLength, OptionalLength, CallbackID)
                If WinHttpReceiveResponse(hRequest, #Null)
                  If WinHttpQueryHeaders(hRequest, #WINHTTP_QUERY_FLAG_NUMBER | #WINHTTP_QUERY_STATUS_CODE, #WINHTTP_HEADER_NAME_BY_INDEX, @lStatusCode, @lLongSize, #WINHTTP_NO_HEADER_INDEX)
                    If lStatusCode = 200
                      lResult = WinHttpQueryDataAvailable(hRequest, @lContentLen)
                    Else
                      lResult = #True
                      lContentLen = 0
                    EndIf
                    If lResult
                      *MemoryBuffer = AllocateMemory(16384)
                      If *MemoryBuffer
                        MemoryLength = MemorySize(*MemoryBuffer)-2
                        If ReturnHeader
                          If WinHttpQueryHeaders(hRequest, #WINHTTP_QUERY_RAW_HEADERS_CRLF, #WINHTTP_HEADER_NAME_BY_INDEX, *MemoryBuffer, @MemoryLength, #WINHTTP_NO_HEADER_INDEX)
                            lRetVal = ReAllocateMemory(*MemoryBuffer, MemoryLength)
                          EndIf
                        ElseIf lContentLen
                          Repeat
                            If MemoryLength-lReadUntilNow <= lContentLen
                              *MemoryBuffer = ReAllocateMemory(*MemoryBuffer, MemoryLength+lContentLen+1)
                              If *MemoryBuffer
                                MemoryLength = MemorySize(*MemoryBuffer)
                              Else
                                Break
                              EndIf
                            EndIf
                            If WinHttpReadData(hRequest, *MemoryBuffer+lReadUntilNow, lContentLen, @lBytesRead)
                              If lBytesRead
                                lReadUntilNow + lBytesRead
                              Else
                                Break
                              EndIf
                              If CallbackProgress
                                CallbackProgress(CallbackID, lReadUntilNow, lContentLen, (ElapsedMilliseconds() - lStartTime) / 1000)
                              EndIf
                            Else
                              Break
                            EndIf
                            If Not WinHttpQueryDataAvailable(hRequest, @lContentLen)
                              Break
                            EndIf
                          ForEver
                          If lReadUntilNow >= lContentLen
                            lRetVal = ReAllocateMemory(*MemoryBuffer, lReadUntilNow)
                          EndIf
                        EndIf
                      EndIf
                    EndIf
                  EndIf
                EndIf
              EndIf
              If *OptionalBuffer
                FreeMemory(*OptionalBuffer)
              EndIf
              If CallbackEnd
                CallbackEnd(CallbackID, lRetVal, lReadUntilNow, lContentLen, (ElapsedMilliseconds() - lStartTime) / 1000)
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
  
  If hRequest
    WinHttpCloseHandle(hRequest)
  EndIf
  If hInternet
    WinHttpCloseHandle(hInternet)
  EndIf
  ; If hSession
  ;   WinHttpCloseHandle(hSession)
  ; EndIf
  
  ProcedureReturn lRetVal
EndProcedure

Procedure.s ReceiveHTTPString(url$, RequestType$ = "GET", ReturnHeader = #False, Username$ = "", Password$ = "", HeaderData$ = "", OptionalData$ = "", UserAgent$ = "WinHTTP - PureBasic", CallbackID = 0, CallbackStart.ReceiveHTTPStart = 0, CallbackProgress.ReceiveHTTPProgress = 0, CallbackEnd.ReceiveHTTPEnd = 0)
  Protected result$, *MemoryBuffer
  *MemoryBuffer = ReceiveHTTPMemory(url$, RequestType$, ReturnHeader, Username$, Password$, HeaderData$, OptionalData$, UserAgent$, CallbackID, CallbackStart.ReceiveHTTPStart, CallbackProgress.ReceiveHTTPProgress, CallbackEnd.ReceiveHTTPEnd)
  If *MemoryBuffer
    If ReturnHeader
      result$ = PeekS(*MemoryBuffer, MemorySize(*MemoryBuffer), #PB_Unicode)
    Else
      result$ = PeekS(*MemoryBuffer, MemorySize(*MemoryBuffer), #PB_UTF8)
    EndIf
    FreeMemory(*MemoryBuffer)
  EndIf
  ProcedureReturn result$
EndProcedure

Procedure ReceiveHTTPFileEx(url$, filename$, RequestType$ = "GET", Username$ = "", Password$ = "", HeaderData$ = "", OptionalData$ = "", UserAgent$ = "WinHTTP - PureBasic", CallbackID = 0, CallbackStart.ReceiveHTTPStart = 0, CallbackProgress.ReceiveHTTPProgress = 0, CallbackEnd.ReceiveHTTPEnd = 0)
  Protected File, *MemoryBuffer
  *MemoryBuffer = ReceiveHTTPMemory(url$, RequestType$, #False, Username$, Password$, HeaderData$, OptionalData$, UserAgent$, CallbackID, CallbackStart.ReceiveHTTPStart, CallbackProgress.ReceiveHTTPProgress, CallbackEnd.ReceiveHTTPEnd)
  If *MemoryBuffer
    File = CreateFile(#PB_Any, filename$)
    If File
      WriteData(File, *MemoryBuffer, MemorySize(*MemoryBuffer))
      CloseFile(File)
      FreeMemory(*MemoryBuffer)
      ProcedureReturn #True
    EndIf
    FreeMemory(*MemoryBuffer)
  EndIf
  ProcedureReturn #False
EndProcedure
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
mback2k
Beiträge: 9
Registriert: 15.11.2008 14:04
Wohnort: Germany

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von mback2k »

Thorsten, vielen Dank für deine Mühe. Ich verstehe jedoch nicht, warum du eine Version benötigst welche die DLL manuell lädt. Du benötigst die winhttp.lib doch nur zur Compile-Zeit und nicht zur Laufzeit. Die winhttp.lib macht ja nichts anderes als die winhttp.dll fest einzubinden.

Ich werde die Tage mal meine aktuelle Version der Include posten, muss nur vorher ein paar interne/spezifische Teile entfernen.
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Thorsten1867 »

Die DLL wird bei Windows mitgeliefert. Für die LIB habe ich noch keine Bezugsquelle ausgemacht.

WinHTTP bietet auch als RequestType "POST" an. Wie kann ich am einfachsten einen Upload (z.B. https://upload.box.net/api/1.0/upload/< ... folder_id>) bewerkstelligen.
Irgendwie muss ich wohl etwas falsch machen. :|
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von ts-soft »

Thorsten1867 hat geschrieben:Die DLL wird bei Windows mitgeliefert. Für die LIB habe ich noch keine Bezugsquelle ausgemacht.
Befindet sich im PSDK, bzw. in dem Lib-Dir der meisten Programmiersprachen. PB hat es leider nicht dabei.
Ansonsten kann man aber auch POLIB.exe, befindet sich im Compilers-Dir von PB, nutzen, und diese Lib
selber erstellen!

Da diese DLL zu Windows gehört, sollte die statische Bindung die bevorzugte Methode sein, aber es ist auch
nicht weiter schlimm, die DLL dynamisch zu laden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Lord »

Frohes neues Jahr!
Besser spät als nie. ;-)

Bei obigem Code von Thorsten habe ich innerhalb der
Prozedur ReceiveHTTPMemory() in der Zeile

Code: Alles auswählen

  If WinHttpCrackUrl(URLEncoder(url$), #Null, #Null, @lpUrlComponents)
immer einen IMA.

Kann es sein, daß der WinHTTP-Code so auf einem
64-Bit-System nicht lauffähig ist?

Wenn ja, welche Änderungen sind vorzunehmen?
Liegt es an der Struktur lpUrlComponents?
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Thorsten1867 »

Lord hat geschrieben:Bei obigem Code von Thorsten habe ich innerhalb der
Prozedur ReceiveHTTPMemory() in der Zeile

Code: Alles auswählen

  If WinHttpCrackUrl(URLEncoder(url$), #Null, #Null, @lpUrlComponents)
immer einen IMA.
Wurde WinHTTP korrekt initalisiert? (siehe unten)

Code: Alles auswählen

XIncludeFile "WinHTTP.pbi"
InitNetwork()
If WinHttp_LoadDLL() = #False ;{ WinHTTP einbinden
  MessageRequester(" WinHTTP", "Fehler beim Laden der DLL!", #MB_OK|#MB_ICONERROR)
  End
EndIf ;}
.....
WinHttpCrackUrl(URLEncoder(url$), #Null, #Null, @lpUrlComponents)
.....
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: WinHTTP (mit SSL) für Memory, String und File Download

Beitrag von Lord »

Thorsten1867 hat geschrieben: Wurde WinHTTP korrekt initalisiert? (siehe unten)

Code: Alles auswählen

XIncludeFile "WinHTTP.pbi"
InitNetwork()
If WinHttp_LoadDLL() = #False ;{ WinHTTP einbinden
  MessageRequester(" WinHTTP", "Fehler beim Laden der DLL!", #MB_OK|#MB_ICONERROR)
  End
EndIf ;}
.....
WinHttpCrackUrl(URLEncoder(url$), #Null, #Null, @lpUrlComponents)
.....
Aarrrglll. :evil:
Nein, hatte ich noch auskommentiert. :oops:
Danke für den Hinweis und die Include.

Kannst Du noch Hinweise für die einzelnen Parameter
der ReceiveHTTP-Routinen geben?
Insbesondere interessiert mich das Laden von Images
in den Speicher zu weiteren Verwendung in einem Image-
gadget. Dieses soll wenn möglich in einem Threat mit
einer Ladezustandanzeige passieren und notfalls abge-
brochen werden können.
Bild
Antworten