Abrir um arquivo URL pelo Clipper

Olá!
Estou tentando abrir um arquivo URL pelo Clipper e não estou conseguindo!
Estou no ChatGPT e cuspiu o seguinte código: https://chatgpt.com/c/69caa1b5-8a28-83e9-a49a-c563b60ec4b2

Estou tentando converter o código Java abaixo:
A pergunta é? Como consigo abrir um arquivo URL pelo Clipper?

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class JavaTeste {
public static void main(String
 args) {
try {
rURLConnection(“https://www.ouka.com.br/x-index.html”);
} catch (Exception error) {
System.out.println(“A URL não Funcionou”);
System.out.println(error.getMessage());
}
}

public static void rURLConnection(String VarURL) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(VarURL))
            .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
            .GET()
            .build();
    
    HttpResponse<String> response = client.send(request, 
            HttpResponse.BodyHandlers.ofString());
    
    System.out.println("Status: " + response.statusCode());
    System.out.println(response.body());
}

}

É Clipper mesmo, Harbour ou xHarbour?

Esse código q vc postou é java?

O código do chatgpt não abriu “não foi possível abrir a conversa”.

Dá uma olhada aqui: GitHub - cnpja/example-harbour: Exemplo em Harbour de como consultar CNPJs via API na Receita Federal, Simples Nacional e Cadastro de Contribuintes · GitHub

Esse código é para ftp, dá uma olhada nas funções correlatas (isso é um exemplo):

oURL              := TUrl():new()
oUrl:cProto       := "ftp"
oUrl:cUserid      := cFTPUSER  
oUrl:cPassword    := cFTPPASS  
oUrl:cServer      := cFTPSERVER
oUrl:nPort        := nFTPPORT  
oFTP              := TIpClientFtp():new( oURL ) // Cria objeto FTP
oFTP:nConnTimeout := -1 // infinito

IF oFTP:OPEN()							
	MSGRODA("Verificando se há uma nova versão...", "W+/BG")
	cFILE := "controli.txt"
	FILEDELETE(cFILE) // SE EXISTIR (local), APAGA.
	IF oFTP:DOWNLOADFILE(cFILE, cFTPFILE)

Para abrir uma conexão http é fácil, mas https é mais difícil. Tem algumas libs no Harbour que faz, mas ainda não conseguí. Para sftp também é ruim, só consigo ftp.

Tenho esse código aqui que é mais parecido com o que você precisa, ele abre uma URL, mas é http (funciona c/ (x)Harbour):

********************
Function Main(cCNPJ)
********************
*
*
If empty(cCNPJ) .or. len(cCNPJ) > 14 .or. len(cCNPJ) < 14
   alert("Informe o CNPJ corretamente !")
   cCNPJ := "60316817000103" //CNPJ -> Microsoft //"5311379100012"
EndIf

GetCNPJ(cCNPJ)

Return Nil

***********************
Function GetCNPJ(cCNPJ)
***********************
*
*
Local cRazao, cFantasia, cEndereco, cBairro, cCidade
Local cURL, oHTTP, cBloco, nInicio, nFim, cCEP

If empty(cCNPJ)
   alert("Informe o CNPJ")
   return .f.
EndIf

SETMODE(43,80)
CLS

cURL := "http://cnpj.info/"+cCNPJ
// cURL :=  "https://www.situacaocadastral.info/cnpj/"+cCNPJ
oHTTP:= TIPClientHTTP():New( cURL )
INKEY(0)

cURL := "http://cnpj.info/"+cCNPJ
oHTTP:= TIPClientHTTP():New( cURL )
IF oHTTP:Open()
   // MSGRODA("Lendo cadastro do CNPJ...", "W+/BG")
   IF oHTTP:ReadToFile( "cnpj_"+cCNPJ+".html" )
		cBloco := HB_AnsiToOem( upper( memoread("cnpj_"+cCNPJ+".html") ) )
		// DELETEFILE("cnpj_"+cCNPJ+".html")
		// MSGRODA("Preenchendo os dados automaticamente do cadastro CNPJ...", "W+/BG")
		// LIMITA-SE AO CORPO DO WEBSITE ONDE ESTÇO OS DADOS
		cBloco := substr(cBloco,AT("<BODY>",cBloco) ,AT("</BODY>",cBloco) )

		nInicio := AT("NOME DA EMPRESA",cBloco)
		nFim := AT( "</A>", cBloco, nInicio)  - nInicio

		cUG := substr(cBloco,nInicio,nFim )
		cUG := substr( cUG, RAT(">", cUG)+1 )
		
		? cBLOCO
		?
		? cUG
		
		cBloco := substr(cBloco,nInicio+nFim)

		nInicio := AT("FANTASIA NOME",cBloco)
		nFim := AT( "</A>", cBloco, nInicio)  - nInicio

		cFI := substr(cBloco,nInicio,nFim )
		cFI := substr( cFI, RAT(">", cFI)+1 )
		? cFI
		
		cBloco := substr(cBloco,nInicio+nFim)

		nInicio := RAT("ENDERE",cBloco)+15
		nFim := AT( "CONTATOS", cBloco, nInicio) - nInicio - 5					

		// Tem endere‡o com 4 e 5 linhas, se tiver complemento.
		cBLOCOE := substr(cBloco,nInicio,nFim)

		nInicio := 1 // RAT("ENDERE",cBlocoE)+15
		nFim := AT('<BR>', cBlocoE, nInicio)  - nInicio

		cEnd := substr(cBlocoE,nInicio,nFim )
		cEnd := substr( cEnd, RAT(">",cEnd)+1 )
		? cEND
		
		cBlocoE := substr(cBlocoE,nInicio+nFim+5)
		
		// SE 5 LINHAS, TEM COMPLEMENTO.
		IF OCCURS(CHR(10), cBLOCOE) = 3 // 3 LINE FEEDs, TEM COMPLEMENTO.
			nInicio := 1
			nFim := AT( "<BR>", cBlocoE)-1

			cCOM := substr(cBlocoE,nInicio,nFim ) // COMPLEMENTO
			cCOM := substr( cCOM, AT(">", cCOM)+1 )
			? cCOM
			
			cBlocoE := substr(cBlocoE,nInicio+nFim+5)
		ENDIF
			
		nInicio := 1
		nFim := AT( "<BR>", cBlocoE)-1
		cBAI := substr(cBlocoE,nInicio,nFim )
		? cBAI
		
		cBlocoE := substr(cBlocoE,nInicio+nFim+5)

		nInicio := 1
		nFim := AT( "<BR>", cBlocoE)-1
		cCidadeUF := substr(cBlocoE,nInicio,nFim )
		 
		cCID := ALLTRIM( SUBSTR(cCIDADEUF, 1, (AT("-", cCIDADEUF)-1)) )
		cUF  := ALLTRIM(SUBSTR(cCIDADEUF, (AT("-", cCIDADEUF)+1)))
		? cCID
		? cUF
		
		cBlocoE := substr(cBlocoE,nInicio+nFim + 5)
		nInicio := 1
		nFim := 9
		cCep :=  substr(cBlocoE,nInicio,nFim )
		cCEP := STRTRAN(cCEP, "-") // REMOVE O "-" DO CEP
	
		// BLOCO CONTATOS
		nInicio := AT( "CONTATOS", cBloco, nInicio) - nInicio - 5					
		nFim    := AT( "S¢CIO", cBloco, nInicio) - nInicio - 5   // ATEN€ÇO:  "o" com acento agudo ¢
	
		IF nINICIO > 0 		
			// EXISTE BLOCO DE CONTATOS
			cBLOCOC := substr(cBloco,nInicio,nFim)
			? cBLOCOC
			
			nINI := AT("TEL:", cBLOCOC)
			nINI += 4 // PARA DEPOIS DO TEL:
			nFIM := nINI 
			DO WHILE SUBSTR(cBLOCOC, ++nFIM, 1) # CHR(34) // PROCURA A PRàXIMA ASPA
			ENDDO
			nFIM := (nFIM - nINI)         
			
			// TELEFONE 1
			cTEL1 := SUBSTR(cBLOCOC, nINI, nFIM) // TELEFONE
			? cTEL1
			
			cBLOCOC := SUBSTR(cBLOCOC, nINI)
			nINI := AT("TEL:", cBLOCOC)
			
			IF nINI > 0
				nINI += 4
				nFIM := nINI 
				DO WHILE SUBSTR(cBLOCOC, ++nFIM, 1) # CHR(34) // PROCURA A PRàXIMA ASPA
				ENDDO
				nFIM := (nFIM - nINI)    
				
				// TELEFONE 2
				cTEL2 := SUBSTR(cBLOCOC, nINI, nFIM) // CELULAR
				? cTEL2
				
			ENDIF
			cBLOCOC := SUBSTR(cBLOCOC, nINI)
		
			// EXISTE EMAIL?
			nINI := AT("MAILTO:", cBLOCOC)
			IF nINI > 0
				// PEGA EMAIL
				nINI += 7
				nFIM := nINI
				DO WHILE SUBSTR(cBLOCOC, ++nFIM, 1) # CHR(34) // PROCURA A PRàXIMA ASPA
				ENDDO
				nFIM := (nFIM - nINI)    
				cEMAIL := LOWER( SUBSTR(cBLOCOC, nINI, nFIM) ) // EMAIL
				
				? cEMAIL				
			ENDIF
		ENDIF
	ENDIF
ENDIF	
DELETEFILE("cnpj_"+cCNPJ+".html")
Return .T.

Se alguém já conseguir fazer com https e sftp eu agradeço se compartilhar.