Página 1 de 1
Como baixar arquivos http?
Enviado: 28 Fev 2021 10:55
por carlos_dornelas
Pessoal, bom dia!
Estou tendo alguns problemas utilizando a rotina abaixo para baixar arquivos via http... o arquivo é baixado, porém é uma versão desatualizada do mesmo: parece que puxa de algum lugar do PC mesmo e não da internet... se eu baixo direto pelo navegador, o arquivo vem correto e atualizado.
Código: Selecionar todos
FUNCTION BaixarURLMON(url,arq)
nHandleDLL:=hb_LibLoad("UrlMon.dll")
nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,url,arq,0,0)
hb_LibFree(nHandleDLL)
RETURN Nil
Como vocês fazem para baixar via http?
Estou utilizando o harbour 3.2 night
[]s
Antonio Carlos
Como baixar arquivos http?
Enviado: 01 Mar 2021 10:47
por carlos_dornelas
Prezados,
Após mais pesquisas aqui no forum, encontrei mais algumas opções, mas ainda sem sucesso... Vejam só, das três funções abaixo, só a primeira que utiliza a DLL baixa o arquivo, porém o baixa desatualizado, o interessante é que se baixar o arquivo .zip direto pelo navegador o arquivo vem sempre o mais recente disponível... as outras duas funções baixa um arquivo .zip zerado.
O que está errado?
[]s
Antonio Carlos
Código: Selecionar todos
BaixarURLMON("http://www1.caixa.gov.br/loterias/_arquivos/loterias/d_loteca.zip","pri_loteca.zip")
Baixamur("http://www1.caixa.gov.br/loterias/_arquivos/loterias/d_loteca.zip","seg_loteca.zip")
Baixe("http://www1.caixa.gov.br/loterias/_arquivos/loterias/d_loteca.zip","ter_loteca.zip")
FUNCTION BaixarURLMON(url,arq)
nHandleDLL:=hb_LibLoad("UrlMon.dll")
nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,url,arq,0,0)
hb_LibFree(nHandleDLL)
RETURN Nil
function baixamur(url,arq)
cDownload := url
nSizeFiles := 1000000 // size inf bytes of the file
oUrl2 := tURL():New( cDownload )
lSuccess := .F.
WITH OBJECT ( TIPClientHTTP():New( oUrl2 ) )
:nConnTimeout := 5000
IF :Open( oUrl2 )
:ReadToFile(arq,, 1000000 )
:Close()
lSuccess := .T.
ENDIF
END
function baixe(url,arq)
oConn := TipClientHttp():New(TURL():New(URL))
oConn:nConnTimeout := 10000
IF oConn:Open(URL)
oConn:ReadToFile(arq)
oConn:Close()
ENDIF
Como baixar arquivos http?
Enviado: 02 Mar 2021 08:39
por Marcio-MMM
Uso o TipClientHTTP: e estou tendo o mesmo problema : baixa o arquivo com ZERO BYTES.
Retorna Generic error in writing
o Reply dá HTTP/1.1 400 Bad Request
Pelo Navegador, baixa direitinho...
Código: Selecionar todos
cUrl="http://provedor.com.br/"+alltrim(cFile)+" "+alltrim(cFile)
oUrl := TUrl():New( cUrl )
IF Empty( oUrl )
@ 4, 5 SAY "Invalid url " + cUrl
ENDIF
oClient := TIPClientHTTP():new( oUrl )
IF Empty( oClient )
return ""
ENDIF
oClient:nConnTimeout := 20000
IF oClient:Open()
@ 2,1 say cUrl
@ 3,1 say oUrl
@ 4,1 say cFile
IF oClient:ReadToFile( cFile )
@ 7, 5 SAY "File " + cFile + " written."
@ 8, 5 SAY "Server replied " + oClient:cReply
ELSE
@ 7, 5 SAY "Generic error in writing." + cFile
ENDIF
oClient:Close()
@ 14,1 say oClient:cReply
inkey(0)
ENDIF
Como baixar arquivos http?
Enviado: 02 Mar 2021 19:34
por JoséQuintas
Código: Selecionar todos
FUNCTION DownloadTexto( cUrl )
LOCAL oSoap, cRetorno
cRetorno := ""
BEGIN SEQUENCE WITH __BreakBlock()
oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oSoap:Open( "GET", cUrl, .F.)
oSoap:Send()
cRetorno := oSoap:ResponseBody()
END SEQUENCE
RETURN cRetorno
Como baixar arquivos http?
Enviado: 02 Mar 2021 20:14
por JoséQuintas
Com este outro funciona com ftp, talvez pra upload/download.
Código: Selecionar todos
PROCEDURE Main
LOCAL a, b
a := win_OleCreateObject( "microsoft.XMLHTTP" )
a:Open( "GET", "ftp://ftp.josequintas.com.br/www/arquivos/jpa.exe", .F., "xxx", "xxx" )
a:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
a:Send()
b := a:ResponseBody()
? Len( b )
hb_MemoWrit( "test.xxx", b )
RETURN
Como baixar arquivos http?
Enviado: 04 Mar 2021 10:06
por Marcio-MMM
Valeu Quintas, de novo, matou a pau...
Grato demais.
Como baixar arquivos http?
Enviado: 17 Set 2022 16:29
por JAIR RANGEL
Olá, Mestres
Testando a rotina do Quintas para download de um arquivo.zip
Estou tentando baixar um arquivo .zip do Google Drive.
A rotina sempre baixa um arquivo em formato xml...
Teria como baixar somente o arquivo .zip que está no pasta do Google Drive?
Como baixar arquivos http?
Enviado: 17 Set 2022 16:53
por JoséQuintas
Vai ter que ver como funcionam as APIs do google drive.
Tentou baixar o mesmo link, SEM SER NO NAVEGADOR, pra ver se funciona?
Como baixar arquivos http?
Enviado: 18 Set 2022 12:11
por Linguagemclipper
Carlos, muitos servidores de páginas dinâmicas usam cache. Se o arquivo tem sempre o mesmo nome é provável que você esteja baixando do cache caso o arquivo esteja na pasta
public_html que é onde ficam as páginas da web.
Por este motivo, recomendo que crie um diretório fora da pasta public_html para não sofrer esta ação do cache. Exemplo:
Código: Selecionar todos
cFTPFILE := "example.com/downloads/arquivo.zip" // coloque o caminho e nome do arquivo aqui
// FTP CREDENTIALS
oURL := TUrl():new()
oUrl:cProto := "ftp"
oUrl:cUserid := cFTPUSER
oUrl:cPassword := cFTPPASS
oUrl:cServer := cFTPSERVER
oUrl:nPort := nFTPPORT
oFTP := TIpClientFtp():new( oURL ) // ABRE CONEXÃO FTP
lCONEXAO := .T.
IF oFTP:OPEN()
MSGRODA("Verificando se há uma nova versão...", "W+/BG")
IF oFTP:DOWNLOADFILE(cFTPFILE)
// [...]
ENDIF
ENDIF
Aliás, deixei de usar TIpClientHttp() por conta dessas coisas. Estou usando o FTP aí mesmo que é o protocolo de transmissão de arquivos.
Como baixar arquivos http?
Enviado: 21 Set 2022 15:15
por JAIR RANGEL
Olá, Pessoal
Não consegui baixar o arquivo.zip do Google Drive. Estava utilizando a TIPClientHTTP(), mas sem sucesso. Tentei também configurando para https, mas não rolou. Então, voltei com a rotina utilizando a TIPClientFTP(), a qual sempre funcionou de boa, baixando arquivo.zip no provedor DecolarHost. No entanto, este provedor anunciou a paralização do serviço a partir de Novembro/2022. Por este motivo estou tentando outra solução. Como o Google Drive é gratuíto até 15GB tentei usar alterando a função para TIPClientHTTP(). Mas como mencionei acima, não funcionou aqui...
Depois de voltar com a função TIPClientHTTP() contratei outro serviço de FTP no provedor FTPCloud.com.br
Acabei de fazer o cadastro no site. O bom é que podemos usar por 7 dias para testes, sem pagar nada por isso. Então, vou tentar fazer funcionar.
No momento estou aguardando a liberação das credenciais de acesso ao Server FTP da FTPCloud.
Não sei vocês, mas cada vez mais vejo que o trabalho de desenvolvimento desktop está em seus últimos dias...
Obrigado á todos
Como baixar arquivos http?
Enviado: 21 Set 2022 19:00
por Itamar M. Lins Jr.
Olá!
Testou esse aqui ?
https://drfone.wondershare.com.br/cloud ... drive.html

Saudações,
Itamar M. Lins Jr.
Como baixar arquivos http?
Enviado: 23 Set 2022 11:02
por JAIR RANGEL
Bom dia, Amigos
Depois da liberação do novo servidor FTP a rotina de acesso voltou a funcionar. O problema era mesmo o servidor antigo: DecolarHost
Segue a rotina que uso para acesso:
Código: Selecionar todos
// =============================================================================
STATIC Function ATUALIZACAO_Automatica() // ATUALIZAÇÃO AUTOMÁTICA de Versões
// =============================================================================
LOCAL cFile:="admv"+novaVersao+".zip" // Arq.Compactado de Atualização de Versão
LOCAL cTable:="ADMSTATUS.DBF", lVerify // lVerify: Var.boleana=Verifica se Cliente ATIVO/INATIVO p/atualização
ftpproto := "ftp://" // Protocolo FTP
ftpuser := "admsmart" // Usuário da conta FTP
ftppass := "nnnnnnnnnnnn" // Senha da conta FTP
ftpserver:= "endereço server" // Endereço de FTP
ftpPort := 21 // Porta, caso seja necessário informar na Url
cUrl := ftpproto+ftpuser+":"+ftppass+"@"+ftpserver // Url ftp
oUrl := TUrl():new(cUrl)
oCred := TIPCredentials()
oFTP := TIPClientFTP():NEW(oUrl,,.T.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
If FILE("ADMINSTAUTO.exe") // Se Instalador ADM existe, exclui o mesmo
FERASE("ADMINSTAUTO.exe")
EndIf
If oFTP:Open() // Abre Conexão com Servidor FTP
WAIT WINDOW " Verificando atualização disponível. Aguarde... " NOWAIT
oFTP:Cwd("/atualizacao") // Informa o DIRETORIO (no servidor FTP) onde está o Arquivo de atualização a ser baixado
oFTP:DownLoadFile(cTable) // Realiza Download da Tabela de STATUS de clientes do servidor FTP
If ! FILE(cTable) // Verifica se Tabela Status Cliente foi baixada
MsgINFO('PROBLEMA NA TRANSMISSÃO '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Ocorreu um problema ao receber arquivos de '+Chr(10)+Chr(13)+ ;
'atualização. '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'O acesso a internet pode estar com algum '+Chr(10)+Chr(13)+ ;
'problema momentâneo... '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13),'Atenção')
oFTP:Close() // Encerra Conexão com Servidor FTP
WAIT CLEAR // Fecha Janela de Mensagem
Return // Encerra Rotina de ATUALIZAÇÃO
EndIf
lVerify:=VerifyClient(cTable) // Verifica se Cliente está liberado para ATUALIZAÇÃO de Versão
If ! lVerify // Cliente NÃO HABILITADO para Atualização Automática de Versão...
oFTP:Close() // Encerra Conexão com Servidor FTP
WAIT CLEAR // Fecha Janela de Mensagem
Return // Encerra Rotina de ATUALIZAÇÃO
EndIf
WAIT CLEAR // Fecha Janela de Mensagem
WAIT WINDOW " Realizando download de atualização. Aguarde... " NOWAIT
If ! FILE(cFile) // Verifica se Arquivo de atualização foi BAIXADO ANTERIORMENTE
oFTP:DownLoadFile(cFile) // Realiza Download do Arquivo
EndIf
If ! FILE(cFile) // Verifica se Arquivo de atualização foi BAIXADO
MsgINFO('ATUALIZAÇÃO NÃO ENCONTRADA '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'A atualização NÃO foi localizada '+Chr(10)+Chr(13)+ ;
'no Servidor web '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Uma nova tentativa será feita ao '+Chr(10)+Chr(13)+ ;
'reabrir o Sistema... '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13),'Atenção')
oFTP:Close() // Encerra Conexão com Servidor FTP
WAIT CLEAR // Fecha Janela de Mensagem
Return // Encerra Rotina de ATUALIZAÇÃO
EndIf
If FILE(cFile) // Verifica se Arquivo de atualização foi baixado
If hb_zipFileCRC32(cFile) = 0 // Verifica INTEGRIDADE do Arq.ZIP. Se Diferente de ZERO, é pq o CRC32 do Arq. está OK.
MsgINFO('ARQUIVO '+cFile+' DANIFICADO ' +Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'O Arquivo de próxima atualização do Sistema '+Chr(10)+Chr(13)+ ;
'ADM Smart está corrompido. '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Assim que reabrir o ADM PAINEL este arquivo '+Chr(10)+Chr(13)+ ;
'será baixado novamente. '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Caso esta mensagem continue a aparecer, '+Chr(10)+Chr(13)+ ;
'contactar o Suporte. '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13),'Atenção')
FERASE(cFile) // Deleta Arquivo de Atualização
oFTP:Close() // Encerra Conexão com Servidor FTP
WAIT CLEAR // Fecha Janela de Mensagem
Return Nil // Encerra Rotina de ATUALIZAÇÃO
EndIf
WAIT CLEAR // Fecha Janela de Mensagem
AtualizarVersao(cFile)
EndIf
Else
MsgINFO('CONEXÃO NEGADA '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Não foi possível verificar por atualizações do '+Chr(10)+Chr(13)+ ;
'ERP-ADM Smart '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'O acesso a internet pode estar com algum problema '+Chr(10)+Chr(13)+ ;
'momentâneo '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
'Uma nova tentativa de conexão será feita ao reabrir '+Chr(10)+Chr(13)+ ;
'o ADM PAINEL... '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13)+ ;
' '+Chr(10)+Chr(13),'Atenção')
EndIf
oFTP:Close() // Encerra Conexão com Servidor FTP
CANCELAR_Atualizacao()
WAIT CLEAR // Fecha Janela de Mensagem
Return
Mais uma vez, obrigado pela atenção dos nobres amigos!
Como baixar arquivos http?
Enviado: 27 Set 2022 11:59
por clodoaldomonteiro
Muito boa as dicas, já uso CreateObject("MSXML2.ServerXMLHTTP"), inclusive pra consumir API de consulta de dados de empresas passando CNPJ.
Código: Selecionar todos
////////////////////////////////////////////////////////////////////////////////
//https://pctoledo.org/forum/viewtopic.php?f=43&p=155455#p155455
//https://pctoledo.org/forum/viewtopic.php?f=4&t=23628 (com Header)
//https://pctoledo.org/forum/viewtopic.php?f=4&t=17427 (usando a hb_JSONDecode( cJSON, @hJSON ) )
//https://nfe.io/docs/desenvolvedores/rest-api/consulta-de-cnpj-v1/ (para consultas)
//https://pctoledo.org/forum/viewtopic.php?f=4&p=148594#p148594 (pode fazer FTP)
Function CNPJ_Consulta( cCnpj )
Local mSite := "http://receitaws.com.br/v1/cnpj/", oHttp, hCNPJA := Hash(), mJSONCNPJ, hJSON := Hash()
//mSite := "https://publica.cnpj.ws/cnpj/" //mais completo
If Len( cCnpj ) <> 14
REturn NIL
Endif
Begin Sequence
Try
oHttp := CreateObject("MSXML2.ServerXMLHTTP")
oHttp:Open("GET", mSite + cCNPJ, .F.)
oHttp:send()
CATCH oError
msg := 'Internet Error: 010' + CRLF
msg += 'Aviso..: Erro verificado ao fazer requisição de CNPJ no Site indicado.' + HB_Eol()
msg += 'Site...:' + mSite + HB_Eol()
msg += 'CNPJ...:' + cCNPJ + HB_Eol()
msg += cl_getError(oError, .t.)
msgError ( msg )
hCNPJA := NIL
Break
End
If Empty( oHttp:responseText )
hCNPJA := NIL
Break
ElseIf '"ERROR"' $ oHttp:responseText
msg := 'Request error: 015' + CRLF
msg += 'Aviso..: O retorno da consulta de CNPJ está com erros.' + HB_Eol()
msg += '- Aguarde um minuto e tente novamente.' + HB_Eol()
msg += 'Site...:' + mSite + HB_Eol()
msg += 'CNPJ...:' + cCNPJ + HB_Eol()
msg += 'Response:' + oHttp:responseText + HB_Eol()
msg += 'Status..:' + Str(oHttp:status, 3) + HB_Eol()
msg += cl_getError(, .t.)
MsgError ( msg, .t. )
hCNPJA := NIL
Break
ElseIf 'Too many' $ oHttp:responseText
msg := 'Request error: 020' + CRLF
msg += 'Aviso..: Muitas tentativas de pesquisar CNPJ no Site indicado.' + HB_Eol()
msg += '- Aguarde um minuto e tente novamente.' + HB_Eol()
msg += 'Site...:' + mSite + HB_Eol()
msg += 'CNPJ...:' + cCNPJ + HB_Eol()
msg += 'Response:' + oHttp:responseText + HB_Eol()
msg += 'Status..:' + Str(oHttp:status, 3) + HB_Eol()
MsgAtencao ( msg )
hCNPJA := NIL
Break
Endif
mJSONCNPJ := HB_AnsiToOem(oHttp:responseText)
//ADOStringGrava(mJSONCNPJ + CRLF)
hCNPJA := JSontoHash( mJSONCNPJ )
oHttp := NIL
End Sequence
Return hCNPJA
/////////////////////////////////////////////////////////////////////////////
//https://www.linguagemclipper.com.br/aprendendo-hash
Function JSonToHash( cStringJson )
/***
* Converte string formato Json em Hash
*/
Local hJson := {=>}
cStringJson := StrTran( cStringJson, ':[','=>{')
cStringJson := StrTran( cStringJson, '":"','" => "')
cStringJson := StrTran( cStringJson, '[','{')
cStringJson := StrTran( cStringJson, ']','}')
cStringJson := StrTran( cStringJson, '":null','"=>nil')
cStringJson := StrTran( cStringJson, '":true' ,'"=>.t.' )
cStringJson := StrTran( cStringJson, '":false','"=>.f.')
cStringJson := StrTran( cStringJson, '":','"=>')
cStringJson := StrTran( cStringJson, "\/","/" )
hJSon := &( cStringJson )
Return hJson
/////////////////////////////////////////////////////////////////////////////
Function cl_LimpaString( cString )
Local mRetorno
mRetorno := StrTran( cString, '.', '' )
mRetorno := StrTran( mRetorno, '-', '' )
mRetorno := StrTran( mRetorno, '/', '' )
mRetorno := StrTran( mRetorno, '\', '' )
mRetorno := StrTran( mRetorno, ',', '' )
Return mRetorno
/////////////////////////////////////////////////////////////////////////////
Function cl_NulToString( cString )
cString := If(cString = NIL, '', cString )
Return cString