Download de arquivo usando proxy
Moderador: Moderadores
Download de arquivo usando proxy
Pessoal,
Existe algum exemplo de download de arquivo usando proxy?
Existe algum exemplo de download de arquivo usando proxy?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
A pergunta é como baixar este zip usando o objeto WinHttpRequest ?
A função me retorna o número de bytes do arquivo, mas como salvar ?
A função me retorna o número de bytes do arquivo, mas como salvar ?
Código: Selecionar todos
FUNCTION MAIN
LOCAL cURL := "http://harbour.github.io/art/harbour-ico.zip"
IF ( oHTTP := win_oleCreateObject( "WinHttp.WinHttpRequest.5.1" ) ) != NIL
oHTTP:Open( "GET", cURL, .F. )
//oHTTP:SetProxy(2, "proxy:8080")
oHTTP:Send()
IF oHTTP:Status() == 200
? "Downloaded", hb_ntos( hb_BLen( oHTTP:responseBody ) ), "byte(s)"
ENDIF
ELSE
? "Error: WinHttp 5.1 not available. [" + win_oleErrorText() + "]"
ENDIF
inkey(0)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Download de arquivo usando proxy
Não sei se alterou isto apenas pra debug
Está mostrando o tamanho do que foi recebido.
O conteúdo está em oHttp:ResponseBody
Código: Selecionar todos
? "Downloaded", hb_ntos( hb_BLen( oHTTP:responseBody ) ), "byte(s)"
O conteúdo está em oHttp:ResponseBody
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Download de arquivo usando proxy
Depende do formato disso, pode ser:
Uma única String
Byte Array: é um array com código Ascii (números)
Só como dica, pode precisar descobrir sozinho outras coisas:
Testando o tipo de variável ValType( oHttp:ResponseBody )
Só decidir o que fazer.
Uma única String
Byte Array: é um array com código Ascii (números)
Código: Selecionar todos
IF ValType( oHttp:ResponseBody ) == "C"
hb_MemoWrit( "arquivo.zip", oHttp:ResponseBody )
ELSE
nHandle := fCreate( "arquivo.zip" )
FOR EACH nAscii IN oHttp:Responsebody // FOR nCont = 1 TO Len( oHttp:ResponseBody )
fWrite( nHandle, Chr( nAscii ) )
NEXT
FClose( nHandle )
ENDIF
Testando o tipo de variável ValType( oHttp:ResponseBody )
Só decidir o que fazer.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Download de arquivo usando proxy
Quintas,
O seu exemplo funcionou.
Eu tinha achado esse outro exemplo no google mas não deus certo:
Tentei adaptar deste exemplo mas dá erro no método write
O seu exemplo funcionou.
Eu tinha achado esse outro exemplo no google mas não deus certo:
Código: Selecionar todos
adTypeBinary := 1
adSaveCreateOverWrite := 2
BinaryStream := win_oleCreateObject("ADODB.Stream")
BinaryStream:Type := adTypeBinary
IF ( oHTTP := win_oleCreateObject( "WinHttp.WinHttpRequest.5.1" ) ) != NIL
oHTTP:Open( "GET", cURL, .F. )
//oHTTP:SetProxy(2, "proxy:8080")
oHTTP:Send()
IF oHTTP:Status() == 200
? "Downloaded", hb_ntos( hb_BLen( oHTTP:responseBody ) ), "byte(s)"
cTeste:=oHTTP:responsebody
BinaryStream:Open()
BinaryStream:Write(cTeste)
BinaryStream:SaveToFile("teste.zip", adSaveCreateOverWrite)
ENDIF
ENDIF
Código: Selecionar todos
Sample 2:
;***************************************************************************
;**
;** Code to download a binary file using WinHttp.WinHttpRequest.5.1 and ADODB.Stream
;**
;***************************************************************************
#DefineFunction SaveBinaryData(FileName, ByteArray)
adTypeBinary = 1
adSaveCreateOverWrite = 2
;Create Stream object
BinaryStream = ObjectCreate("ADODB.Stream")
;Specify stream type - binary data.
BinaryStream.Type = adTypeBinary
;Open the stream And write binary data To the object
BinaryStream.Open
BinaryStream.Write(ByteArray)
;Save binary data To disk
BinaryStream.SaveToFile(FileName, adSaveCreateOverWrite)
BinaryStream = 0
Return
#EndFunction
; Instantiate a WinHttpRequest object.
WinHttpReq = ObjectCreate("WinHttp.WinHttpRequest.5.1")
; Initialize an HTTP request.
WinHttpReq.Open("GET", "http://files.winbatch.com/wwwftp/wb01/wwctl44i.zip", @FALSE)
; Send the HTTP request.
WinHttpReq.Send()
; Display the response text.
ByteArray = WinHttpReq.ResponseBody
SaveBinaryData("d:\temp\wwctl44i.zip", ByteArray)
; Clean up
WinHttpReq = 0
Exit
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Download de arquivo usando proxy
Nessa parte mais prático usar o recurso do Harbour do que ADO.
Não sei se a rotina com ADO está certa, mas por acaso o motivo foi porque não achou o arquivo salvo?
Quando se está usando API do Windows, tem que lembrar que a API não conhece a pasta atual.
Teria que passar o PATH completo.
Mas tem diversas formas de baixar o arquivo, essa é só uma delas.
Aqui uso outro controle ao invés desse, mas o jeito de usar é o mesmo
Não lembro mais porque optei por este.
Mas é o mesmo que uso no webservice da Sefaz.
Aqui uso pra atualizar meu aplicativo on-line, em qualquer versão de Windows.
Deixe como anotação no seu fonte, vai que a Microsoft bloqueia um deles, já tem o outro anotado.
Não sei se a rotina com ADO está certa, mas por acaso o motivo foi porque não achou o arquivo salvo?
Quando se está usando API do Windows, tem que lembrar que a API não conhece a pasta atual.
Teria que passar o PATH completo.
Mas tem diversas formas de baixar o arquivo, essa é só uma delas.
Aqui uso outro controle ao invés desse, mas o jeito de usar é o mesmo
Código: Selecionar todos
oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
Mas é o mesmo que uso no webservice da Sefaz.
Aqui uso pra atualizar meu aplicativo on-line, em qualquer versão de Windows.
Deixe como anotação no seu fonte, vai que a Microsoft bloqueia um deles, já tem o outro anotado.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Download de arquivo usando proxy
Quintas,
Dava erro no método write do adodb.stream. Ai a sua solução resolveu, o principal também é que o setproxy, funcionou onde vai rodar a rotina.
Dava erro no método write do adodb.stream. Ai a sua solução resolveu, o principal também é que o setproxy, funcionou onde vai rodar a rotina.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
Quintas,
Olha o que eu achei na pasta package do harbour:
Atualização de hoje.
Veja o arquivo:
getmingw.hb
O que eu achei interessante foi esta função dentro deste .hb com detalhe para o adodb.stream
Olha o que eu achei na pasta package do harbour:
Atualização de hoje.
Veja o arquivo:
getmingw.hb
O que eu achei interessante foi esta função dentro deste .hb com detalhe para o adodb.stream
Código: Selecionar todos
STATIC FUNCTION dl_file( cURL, cFileName )
LOCAL lSuccess
#if defined( __PLATFORM__WINDOWS )
LOCAL tmp
LOCAL cScript
LOCAL cJS
#endif
IF hb_processRun( ;
"curl " + ;
"-fsS " + ;
"-o " + FNameEscape( cFileName ) + " " + ;
"-L --proto-redir =https " + ;
Chr( 34 ) + StrTran( cURL, " ", "%20" ) + Chr( 34 ) ) >= 0
RETURN .T.
ENDIF
lSuccess := .F.
#if defined( __PLATFORM__WINDOWS )
#pragma __cstream | cJS := %s
var http = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
http.Open("GET", "%1$s", false);
http.Send();
if(http.Status() == 200) {
var f = new ActiveXObject("ADODB.Stream");
f.type = 1; f.open(); f.write(http.responseBody);
f.savetofile("%2$s", 2);
}
#pragma __endtext
hb_vfClose( hb_vfTempFile( @cScript,,, ".tmp" ) )
IF hb_MemoWrit( cScript, ;
hb_StrFormat( cJS, ;
cURL, ;
StrTran( cFileName, "\", "\\" ) ) )
IF hb_processRun( "cscript" + ;
" //nologo" + ;
" /e:jscript" + ;
" " + FNameEscape( cScript ),, @tmp, @tmp ) == 0
lSuccess := .T.
ENDIF
ENDIF
hb_vfErase( cScript )
#endif
RETURN lSuccess
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
Um bom exemplo com Java script
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Download de arquivo usando proxy
rotina ADO dela
em Harbour
Aliás, tem a rotina completa usando winhttp.
Estamos usando uma "classe" instalada no Windows.
Estamos usando as "funções" dentro da classe, por isso os nomes são iguais, não importa a linguagem de programação.
Código: Selecionar todos
var f = new ActiveXObject("ADODB.Stream");
f.type = 1; f.open(); f.write(http.responseBody);
f.savetofile("%2$s", 2);
Código: Selecionar todos
f := win_OleDbCreateObject( "ADODB.Stream" )
f:Type := 1
f:Open()
f:Write( oHttp:ResponseBody )
f:SaveToFile( "nomearquivo", 2 )
Estamos usando uma "classe" instalada no Windows.
Estamos usando as "funções" dentro da classe, por isso os nomes são iguais, não importa a linguagem de programação.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Download de arquivo usando proxy
Quintas,
Com harbour dá o erro no f:write()
Com harbour dá o erro no f:write()
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
Com o script java funciona.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
Aproveitando, fiz esta função que funcionou.
Código: Selecionar todos
#include "hbcompat.ch"
FUNCTION Download()
LOCAL cURL := "http://harbour.github.io/art/harbour-ico.zip"
LOCAL cArq := "harbour-ico.zip"
IF dl_file( cURL, cArq )
RETURN .T.
ENDIF
RETURN Nil
FUNCTION dl_file( cURL, cFileName )
LOCAL lSuccess
#if defined( __PLATFORM__WINDOWS )
LOCAL tmp
LOCAL cScript
LOCAL cJS
#endif
#pragma __cstream | cJS := %s
var http = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
http.Open("GET", "%1$s", false);
http.Send();
if(http.Status() == 200) {
var f = new ActiveXObject("ADODB.Stream");
f.type = 1; f.open(); f.write(http.responseBody);
f.savetofile("%2$s", 2);
}
#pragma __endtext
Try
hb_vfClose( hb_vfTempFile( @cScript,,, ".tmp" ) )
IF hb_MemoWrit( cScript, ;
hb_StrFormat( cJS, ;
cURL, ;
StrTran( cFileName, "\", "\\" ) ) )
cProgram:="cscript" + ;
" //nologo" + ;
" /e:jscript" + ;
" " + FNameEscape( cScript )
Execute(cProgram)
ENDIF
hb_vfErase( cScript )
lSuccess := .T.
Catch
lSuccess := .F.
End
RETURN lSuccess
STATIC FUNCTION FNameEscape( cFileName )
RETURN '"' + cFileName + '"'
FUNCTION Execute(cProgram, lEspera)
LOCAL oShell, lOk := .T., nStyle
hb_Default(@lEspera,.T.)
TRY
oShell:=WIN_OleCreateObject( "WScript.Shell" )
CATCH
TRY
oShell:=WIN_OleCreateObject( "WScript.Shell" )
CATCH
lOk := .F.
END
END
IF lOk
TRY
/*
intWindowStyle
Description
0 Hides the window and activates another window.
1 Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
2 Activates the window and displays it as a minimized window.
3 Activates the window and displays it as a maximized window.
4 Displays a window in its most recent size and position. The active window remains active.
5 Activates the window and displays it in its current size and position.
6 Minimizes the specified window and activates the next top-level window in the Z order.
7 Displays the window as a minimized window. The active window remains active.
8 Displays the window in its current state. The active window remains active.
9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
10 Sets the show-state based on the state of the program that started the application.
*/
nStyle:=0
//oShell:Run("sumatrapdf.exe -print-to-default -reuse-instance -lang pt "+cSource, nStyle, lEspera)
//oShell:Run("sumatrapdf.exe -print-to "+'"'+cPrinter+'"'+" -reuse-instance -lang pt "+cSource, nStyle, lEspera)
oShell:Run(cProgram, nStyle, lEspera)
CATCH
MsgStop("Erro executando "+cProgram, "Erro")
lOk := .F.
END
oShell:=Nil
ENDIF
RETURN lOk
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Download de arquivo usando proxy
Quintas,
Agora temos 2 opções a sua dica original com:
e a com java script.
Agora temos 2 opções a sua dica original com:
Código: Selecionar todos
cTeste:=oHTTP:responsebody
IF ValType( cTeste ) == "C"
hb_MemoWrit( cArq, cTeste )
ELSE
nHandle := fCreate( cArq )
FOR EACH nAscii IN cTeste // FOR nCont = 1 TO Len( oHttp:ResponseBody )
fWrite( nHandle, Chr(nAscii) )
NEXT
FClose( nHandle )
ENDIF
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
