No. Lo le probado pero parece tnrer
Entiendo que prefieres no usar hbcurl. Aquí tienes alternativas para crear un programa Harbour que suba archivos a Google Drive.
📦 Alternativas a hbcurl
1. Usar la biblioteca hbtip (nativa de Harbour)
Es una buena opción que a menudo ya viene incluida con Harbour:
```clipper
PROCEDURE Main()
LOCAL oHttp
LOCAL cToken := "TU_ACCESS_TOKEN_AQUI"
LOCAL cFile := "archivo.txt"
LOCAL cResponse
LOCAL hHeaders
// Configurar encabezados HTTP
hHeaders := { ;
"Authorization": "Bearer " + cToken, ;
"Content-Type": "application/octet-stream" ;
}
// Crear cliente HTTP
oHttp := TIPClientHTTP():new( ;
// Configurar encabezados
FOR EACH cHeader IN hHeaders
oHttp:hFields[ cHeader:__enumKey ] := cHeader:__enumValue
NEXT
// Subir archivo (método simple)
IF oHttp:post( hb_MemoRead( cFile ) )
cResponse := oHttp:result
? "Éxito:", cResponse
ELSE
? "Error:", oHttp:lastErrorMessage()
ENDIF
oHttp:close()
RETURN
```
2. Usar curl externo (si está disponible en el sistema)
Puedes ejecutar curl desde Harbour:
```clipper
PROCEDURE UploadWithCurl()
LOCAL cToken := "TU_TOKEN_AQUI"
LOCAL cArchivo := "documento.pdf"
LOCAL cComando
LOCAL nResult
// Construir comando curl
cComando := 'curl -X POST ' + ;
'-H "Authorization: Bearer ' + cToken + '" ' + ;
'-H "Content-Type: application/octet-stream" ' + ;
'--data-binary "@' + cArchivo + '"'
// Ejecutar curl
nResult := hb_ProcessRun( cComando )
IF nResult == 0
? "Archivo subido exitosamente"
ELSE
? "Error en la subida"
ENDIF
RETURN
```
3. Usar PowerShell en Windows (alternativa nativa)
```clipper
PROCEDURE UploadWithPowerShell()
LOCAL cScript, cTempFile
// Crear script PowerShell temporal
cScript := ;
"$token = 'TU_TOKEN_AQUI'; " + ;
"$headers = @{ Authorization = 'Bearer ' + $token }; " + ;
"$file = 'C:\\ruta\\archivo.txt'; " + ;
"-Method Post -Headers $headers -InFile $file -ContentType 'application/octet-stream'"
// Guardar script temporal
cTempFile := hb_FtempCreate()
hb_MemoWrit( cTempFile + ".ps1", cScript )
// Ejecutar PowerShell
hb_ProcessRun( "powershell -ExecutionPolicy Bypass -File " + cTempFile + ".ps1" )
// Limpiar
FErase( cTempFile + ".ps1" )
RETURN
```
🔐 Simplificando la Autenticación
Si el proceso de OAuth 2.0 es complejo, considera:
1. Token manual: Obtén un token desde la Consola de OAuth 2.0 Playground (para pruebas)
2. Cuenta de servicio: Para automatización server-to-server:
```clipper
// Con cuenta de servicio (archivo JSON)
FUNCTION GetServiceAccountToken( cKeyFile )
LOCAL cCommand
LOCAL cToken := ""
// Usando gcloud CLI (si está instalado)
cCommand := 'gcloud auth print-access-token --key-file=' + cKeyFile
cToken := hb_ProcessRun( cCommand, @cToken )
RETURN cToken
```
📊 Comparación de métodos
Método Ventajas Desventajas
hbtip Nativo de Harbour, sin dependencias externas Documentación limitada
curl externo Muy confiable, ampliamente usado Requiere curl instalado
PowerShell Ideal para entornos Windows puros Solo funciona en Windows
💡 Recomendación práctica
Para un proyecto serio, te sugiero:
1. Para máxima compatibilidad: Usa hbtip si puedes resolver la autenticación
2. Para rapidez de desarrollo: Usa curl externo con tokens manuales para pruebas
3. Para producción Windows: Considera PowerShell con cuentas de servicio
Saludos
Ciro