Página 1 de 1

oHTTP:= TIpClientHttp():new(cURL) NÃO ESTÁ BAIXANDO ARQUIVO

Enviado: 29 Abr 2020 20:43
por Linguagemclipper
Não sei porque o meu código está retornando uma página web do tipo 301 Moved Permanently - The document has been permanently moved, enquanto que, deveria baixar um arquivo de texto de 1 linha.

Código: Selecionar todos

oHTTP:= TIpClientHttp():new( cURL )
A princípio protegí a pasta com usuário e senha e construí a URL como neste exemplo:
cURL := "http://usuario:senha@meusitedaweb.com.b ... cencas.txt"

Depois fui testar normal no raíz sem proteção de pastas nem usuário e senha:
cURL := "http://meusitedaweb.com.br/licencas.txt"

Entretanto, o problema continua.
Estou mexendo no código original para poder tornar público, dados do servidor não são reais.

Código: Selecionar todos

IF EMPTY(UG->CHAVE)
   IF oHTTP:OPEN()
      cLICENCAS := oHttp:readAll()
      oHTTP:CLOSE()
	  Memowrit( "licencas.txt", cLICENCAS ) 
      nLICENCAS := MLCOUNT(cLICENCAS)
      FOR nX=1 TO nLICENCAS
          cLICENCA := MEMOLINE(cLICENCAS,,nX)
	      // CNPJ 14     | DATA 8
	      //99999999999999CC/CC/CC
	      cCNPJ := LEFT(cLICENCA,14)
	      IF cCNPJ = UG->CNPJ
             cEXPIRA := RIGHT(cLICENCA,6)
	 	     dEXPIRA := CTOD(cEXPIRA)
		     IF DATE() >= dEXPIRA
		        lLICENCA := .T.
				cCHAVE := cCNPJ+DTOS(dEXPIRA)
	            // CRIPTOGRAFA	  
	            UG->( LOCKREG())
                UG->CHAVE := HB_CRYPT(cCHAVE, xSENHA)  // CHAVE, C, 22
                UG->( DBUNLOCK())
                UG->( DBCOMMIT())
				ALERT("LICENÇA VÁLIDA ATÉ: "+DTOC(dEXPIRA) )
	         ENDIF
		     EXIT
	      ENDIF
      NEXT	  
	  IF !lLICENCA
	     ALERT("LICENÇA INEXISTENTE!")
		 QUIT
	  ENDIF
   ELSE
      ALERT("Erro de conexão:", oHttp:lastErrorMessage())
	  ALERT("NÃO FOI POSSÍVEL VALIDAR ESTA LICENÇA")
   ENDIF
ELSE
   cCHAVE  := HB_DECRYPT(UG->CHAVE, xSENHA)
   cEXPIRA := RIGHT(cCHAVE,8) // YYYYMMDD
   cDIA    := RIGHT(cEXPIRA,2)
   cMES    := SUBSTR(cEXPIRA,5,2)
   cANO    := SUBSTR(cEXPIRA,3,2)
   dEXPIRA := CTOD(cDIA+"/"+cMES+"/"+cANO)
   IF DATE() >= dEXPIRA
	  lLICENCA := .T.
   ELSE
      ALERT("SUA LICENÇA EXPIROU EM: "+DTOC(dEXPIRA) )
	  QUIT
   ENDIF
ENDIF    
No DBF tem um campo chave onde eu gravaria uma string com o CNPJ+DATA de expiração da licença de forma criptografada.

O arquivo de texto eu quero deixar numa pasta protegida com usuário e senha sem criptografia para poder controlar de forma remota facilmente. Entendo que não preciso criptografar este arquivo porque estará numa pasta protegida na web que ninguém terá acesso sem as credenciais. O arquivo deveria ter 22 caracteres em cada linha com o CNPJ+DATA das licenças.

Resolví gravar o arquivo para ver seu conteúdo, o arquivo que baixa é esse:
<!DOCTYPE html>
<html style="height:100%">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" >
<title> 301 Moved Permanently
</title></head>
<body style="color: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;">
<div style="height:auto; min-height:100%; "> <div style="text-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;">
<h1 style="margin:0; font-size:150px; line-height:150px; font-weight:bold;">301</h1>
<h2 style="margin-top:20px;font-size: 30px;">Moved Permanently
</h2>
<p>The document has been permanently moved.</p>
</div></div></body></html>

oHTTP:= TIpClientHttp():new(cURL) NÃO ESTÁ BAIXANDO ARQUIVO

Enviado: 29 Abr 2020 20:52
por ANDRIL
Testando pelo navegador exibe o arquivo TXT solicitado?

oHTTP:= TIpClientHttp():new(cURL) NÃO ESTÁ BAIXANDO ARQUIVO

Enviado: 29 Abr 2020 21:31
por Linguagemclipper
Aparece sim!
Pelo navegador aparece tanto no raíz como na pasta protegida colocando as credenciais (usuário e senha), tudo normal.
Só uma obsevação: meu site é https, mas se colocar http no navegador acessa normalmente também. Existe outra função para usar com https? Se eu usar https dá erro com essa função.

oHTTP:= TIpClientHttp():new(cURL) NÃO ESTÁ BAIXANDO ARQUIVO

Enviado: 29 Abr 2020 23:00
por ANDRIL
Creio que TIpClienteHttp não trabalha nativamente com https. Tempos atrás também passei por isso.
Pelo que sei tem que ativar na compilação o SSL
hbssl.hbc
hbtip.hbc
E ter obrigatoriamente as DLLS (libeay32.dll e ssleay32.dll) no diretório do seu EXE.

Não cheguei a usar, já que o site não usava https. Trecho do código fonte:

Código: Selecionar todos

if at("https://",cUrl)=0
	cUrl=if(at("http://",cUrl)=0,"http://"+cUrl,cUrl)
else
	//se for HTTPS verifica no diretorio corrente se ha as DLL
	if !file("libeay32.dll")
	return "ERRO: Https Falta libeay32.dll no diretorio do sistema"
	endif
	if !file("ssleay32.dll")
	return "ERRO: Https Falta ssleay32.dll no diretorio do sistema"	
	endif
endif 

oHTTP:= TIpClientHttp():new(cURL) NÃO ESTÁ BAIXANDO ARQUIVO

Enviado: 02 Mai 2020 13:50
por Linguagemclipper
Descobrí que o problema era o HTTPS mesmo, pois mudei de servidor e todos os sites ficaram fora do ar, só voltaram quando instalei o Let´s Encrypt.
Daí testei com outro domínio que não é https e conseguí acessar o arquivo normalmente.
Não cheguei a testar com as DLLs, mas obrigado pela dica.