Underc0de

Programación General => Otros lenguajes => Mensaje iniciado por: BlackBlex en Junio 26, 2017, 12:53:10 AM

Título: [Cramel] HTTPRequest.cml ~ Haz peticiones GET & POST
Publicado por: BlackBlex en Junio 26, 2017, 12:53:10 AM
Les traigo este código el cual te facilita las peticiones GET y POST.



Información

  • Compatible con Cramel: 2.0.0.362
  • Librerías requeridas: MSVBVM60.cml



Tiene los siguientes métodos:

Tiene las siguientes Propiedades:

Para usarla solo es de Importar la librería Cramel, HTTPRequest, su archivo de constantes y apis propia; después declaramos una variable del tipo HTTP y creamos el objecto.

Y es todo por el momento.

Aquí el código HTTPRequest.cml:
Código (Cramel) [Seleccionar]
'/**
' * HTTP Request
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: HTTPRequest.cml
' * ---------------------------------------
'*/

Clase HTTP,_
    pServidor:Cadena,_
    pDirección:Cadena,_
    pAgente:Cadena,_
    pMetodo:Cadena,_
    pError:Cadena,_
    pVersion:Cadena,_
    pPuerto:Word,_
    ppOpen:Entero,_
    pConnect:Entero,_
    pRequest:Entero,_
    pStatusCode:Entero,_
    pStatusText:Cadena,_
    pTamañoPagina:Entero

    Var Content:Cadena
    Var Parametros:Cadena
    Var Buffer:Cadena
    Var BufferSta:Entero
    Var Lent:Entero
    Var QueryInfo:Cadena
    Var TamQueryInfo:Entero

    Constructor:Inicializar
    Destructor:Finalizar

    Sección Privada
        Proc Inicializar
            pAgente = "CramelRequest"
            pPuerto = INTERNET_DEFAULT_HTTP_PORT
            pVersion = "HTTP/1.1"
            pMetodo = "GET"
        FinProc

        Proc Finalizar
            Si ( pConnect ) Entonces
                InternetCloseHandle(pConnect)
            FinSi
            Si ( ppOpen ) Entonces
                InternetCloseHandle(ppOpen)
            FinSi
        FinProc

        Proc SetStatusText
            Seleccionar pStatusCode
                Caso HTTP_STATUS_CONTINUE
                    pStatusText = "La solicitud puede continuar."
                Caso HTTP_STATUS_OK
                    pStatusText = "La solicitud se completó correctamente."
                Caso HTTP_STATUS_MOVED
                    pStatusText = "El recurso solicitado se ha asignado a un nuevo URI permanente (Uniform Resource Identifier), y cualquier referencia futura a este recurso se debe hacer usando uno de los URIs devueltos."
                Caso HTTP_STATUS_REDIRECT
                    pStatusText = "El recurso solicitado reside temporalmente bajo un URI diferente (Uniform Resource Identifier)."
                Caso HTTP_STATUS_BAD_REQUEST
                    pStatusText = "La solicitud no pudo ser procesada por el servidor debido a la sintaxis no válida."
                Caso HTTP_STATUS_FORBIDDEN
                    pStatusText = "Acceso denegado."
                Caso HTTP_STATUS_NOT_FOUND
                    pStatusText = "El servidor no ha encontrado nada que coincida con el URI solicitado (Uniform Resource Identifier)."
                Caso HTTP_STATUS_SERVER_ERROR
                    pStatusText = "El servidor encontró una condición inesperada que le impidió cumplir con la solicitud."
                Caso HTTP_STATUS_SERVICE_UNAVAIL
                    pStatusText = "El servicio está temporalmente sobrecargado."
            FinSeleccionar
        FinProc

        Proc SetError
            Seleccionar GetLastError()
                Caso ERROR_INTERNET_OPERATION_CANCELLED
                    pError = "La operación se canceló, normalmente porque el identificador en el que se estaba ejecutando la solicitud se cerró antes de que se completase la operación."
                Caso ERROR_INTERNET_INCORRECT_HANDLE_TYPE
                    pError = "El tipo de identificador suministrado es incorrecto para esta operación."
                Caso ERROR_INTERNET_INTERNAL_ERROR
                    pError = "Ha ocurrido un error interno."
                Caso ERROR_INTERNET_INVALID_URL
                    pError = "La URL no es válida."
                Caso ERROR_INTERNET_UNRECOGNIZED_SCHEME
                    pError = "El esquema de la URL es distinto de \x22http:\x22 o \x22https:\x22."
                Caso ERROR_INTERNET_SHUTDOWN
                    pError = "La ayuda de la función INTERNET se está cerrando o está fuera del alcance."
                Caso ERROR_NOT_ENOUGH_MEMORY
                    pError = "No hay suficiente memoria disponible para completar la operación solicitada."
                Caso ERROR_INTERNET_CANNOT_CONNECT
                    pError = "La conexión al servidor falló."
                Caso ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
                    pError = "El servidor requiere autenticación de cliente SSL."
                Caso ERROR_INTERNET_CONNECTION_ERROR
                    pError = "Se ha restablecido o se ha finalizado la conexión con el servidor o se ha detectado un protocolo SSL incompatible."
                Caso ERROR_INTERNET_INCORRECT_HANDLE_STATE
                    pError = "La operación solicitada no se puede realizar porque el identificador suministrado no está en el estado correcto."
                Caso ERROR_INTERNET_LOGIN_FAILURE
                    pError = "El intento de inicio de sesión falló. Cuando se encuentra este error, el identificador de solicitud debe cerrarse con InternetCloseHandle."
                Caso ERROR_INTERNET_NAME_NOT_RESOLVED
                    pError = "No se puede resolver el nombre del servidor."
                Caso ERROR_INTERNET_RESPONSE_DRAIN_OVERFLOW
                    pError = "La respuesta entrante excede un tamaño límite interno."
                Caso ERROR_INTERNET_SECURE_FAILURE
                    pError = "Uno o más errores se encontraron en el certificado SSL enviado por el servidor."
                Caso ERROR_INTERNET_TIMEOUT
                    pError = "El tiempo de la solicitud se ha agotado."
                Caso ERROR_INVALID_PARAMETER
                    pError = "El parámetro es invalido"
                Caso ERROR_INTERNET_RESEND_REQUEST
                    pError = "La aplicación debe llamar HttpSendRequest de nuevo debido a un problema de redirección o la autenticación."
                Caso ERROR_INSUFFICIENT_BUFFER
                    pError = "Buffer insuficiente."
            FinSeleccionar
            SetLastError(0)
        FinProc

        Proc escribirServidor(dato:Cadena)
            pServidor = dato
        FinProc
        Proc leerServidor:Cadena
            Resultado = pServidor
        FinProc
       
        Proc escribirPuerto(dato:Word)
            pPuerto = dato
        FinProc
        Proc leerPuerto:Word
            Resultado = pPuerto
        FinProc

        Proc escribirAgente(dato:Cadena)
            pAgente = dato
            Si (pRequest) Entonces
                HttpAddRequestHeaders(pRequest, pAgente, -1, (HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD))
            FinSi
        FinProc
        Proc leerAgente:Cadena
            Resultado = pAgente
        FinProc

        Proc escribirMetodo(dato:Cadena)
            pMetodo = Mayúsculas(dato)
        FinProc
        Proc leerMetodo:Cadena
            Resultado = pMetodo
        FinProc

        Proc escribirDirección(dato:Cadena)
            pDirección = dato
        FinProc
        Proc leerDirección:Cadena
            Resultado = pDirección
        FinProc

        Proc escribirError(dato:Cadena)

        FinProc
        Proc leerError:Cadena
            Resultado = pError
        FinProc

        Proc escribirVersion(dato:Cadena)
            pVersion = dato
        FinProc
        Proc leerVersion:Cadena
            Resultado = pVersion
        FinProc

        Proc escribirStatusCode(dato:Entero)
            pStatusCode = dato
            SetStatusText
        FinProc
        Proc leerStatusCode:Entero
            Resultado = pStatusCode
        FinProc

        Proc escribirStatusText(dato:Cadena)
            pStatusText = dato
        FinProc
        Proc leerStatusText:Cadena
            Resultado = pStatusText
        FinProc

        Proc escribirTamañoPagina(dato:Entero)
            pTamañoPagina = dato
        FinProc
        Proc leerTamañoPagina:Entero
            Resultado = pTamañoPagina
        FinProc

    Sección Pública
        Prop Version:Cadena
            Lectura:leerVersion
            Escritura:escribirVersion
        FinProp

        Prop Agente:Cadena
            Lectura:leerAgente
            Escritura:escribirAgente
        FinProp

        Prop Servidor:Cadena
            Lectura:leerServidor
            Escritura:escribirServidor
        FinProp

        Prop Puerto:Word
            Lectura:leerPuerto
            Escritura:escribirPuerto
        FinProp

        Prop Metodo:Cadena
            Lectura:leerMetodo
            Escritura:escribirMetodo
        FinProp

        Prop Dirección:Cadena
            Lectura:leerDirección
            Escritura:escribirDirección
        FinProp

        Prop Error:Cadena
            Lectura:leerError
            Escritura:escribirError
        FinProp

        Prop StatusCode:Entero
            Lectura:leerStatusCode
            Escritura:escribirStatusCode
        FinProp

        Prop StatusText:Cadena
            Lectura:leerStatusText
            Escritura:escribirStatusText
        FinProp

        Prop TamañoPagina:Entero
            Lectura:leerTamañoPagina
            Escritura:escribirTamañoPagina
        FinProp

        Proc Conectar(Opcional Usuario:Cadena = Nulo, Opcional Contraseña:Cadena = Nulo):Booleano
            Si pServidor = "" Entonces
                Salir
            FinSi

            ppOpen = InternetOpen(pAgente, INTERNET_OPEN_TYPE_PRECONFIG, Nulo, Nulo, 0)

            Si (ppOpen) Entonces
                pConnect = InternetConnect(ppOpen, pServidor, pPuerto, Usuario, Contraseña, INTERNET_SERVICE_HTTP, 0, 0)
                Si (pConnect) Entonces
                    Devolver Verdad
                SiNo
                    SetError()
                    Devolver Falso
                FinSi
            SiNo
                Salir
            FinSi
        FinProc

        Proc Enviar():Entero
            Si (pConnect = 0) Entonces
                Devolver Falso
            FinSi

            pRequest = HttpOpenRequest(pConnect, pMetodo, pDirección, pVersion, Nulo, Nulo, (INTERNET_FLAG_NO_COOKIES Or INTERNET_FLAG_NO_CACHE_WRITE), 0)

            Si (pRequest = 0) Entonces
                SetError
                Devolver Falso
            FinSi

            Si (pAgente != "") Entonces
                HttpAddRequestHeaders(pRequest, pAgente, -1, (HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD))
            FinSi

            Seleccionar pMetodo
                Caso "POST"
                    Content = "Content-Type: application/x-www-form-urlencoded"
                    Si CadLong(Parametros) <> 0 Entonces
                        Si HttpSendRequest(pRequest, Content, CadLong(Content), Parametros, CadLong(Parametros)) = Falso Entonces
                            SetError
                            Devolver Falso
                        FinSi
                    FinSi
                Caso "GET"
                    Si HttpSendRequest(pRequest, Nulo, 0, Nulo, 0) = Falso Entonces
                        SetError
                        Devolver Falso
                    FinSi
            FinSeleccionar

            QueryInfo = Espacio(1024)
            TamQueryInfo = CadLong(QueryInfo)
            HttpQueryInfo(pRequest, HTTP_QUERY_STATUS_CODE, StrPtr(QueryInfo), TamQueryInfo@, BufferSta@ )
            EsteObjeto.StatusCode = CadEnt(QueryInfo)

            QueryInfo = Espacio(1024)
            TamQueryInfo = CadLong(QueryInfo)
            HttpQueryInfo(pRequest, HTTP_QUERY_CONTENT_LENGTH, StrPtr(QueryInfo), TamQueryInfo@, BufferSta@ )
            EsteObjeto.TamañoPagina = CadEnt(QueryInfo)

            Resultado = Verdad
        FinProc

        Proc LeerRespuesta:Cadena
            Var control:Booleano
            Si (pRequest) Entonces
                control = Verdad
                Buffer = Espacio(400)
                Mientras control != Falso
                    InternetReadFile(pRequest, StrPtr(Buffer), 400, Lent@)
                    Si Lent = Falso Entonces
                        control = Falso
                        SetError
                        Salir
                    FinSi
                    Resultado = Resultado + Buffer
                FinMientras
            FinSi
        FinProc

FinClase


Archivo Constantes.cml <- Se recomienda que tengan un archivo propio de constantes (y que sea global), donde puedan poner todas las constantes que no contenta Cramel por defecto.
Código (Cramel) [Seleccionar]
'/**
' * Constantes para el HTTPRequest
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: Constantes.cml
' * ---------------------------------------
'*/

'Constantes HTTP
    Const INTERNET_OPEN_TYPE_PRECONFIG                   = 0
    Const INTERNET_OPEN_TYPE_DIRECT                      = 1
    Const INTERNET_OPEN_TYPE_PROXY                       = 3
    Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
   
    Const INTERNET_SERVICE_FTP    = 1
    Const INTERNET_SERVICE_GOPHER = 2
    Const INTERNET_SERVICE_HTTP   = 3

    Const INTERNET_INVALID_PORT_NUMBER = 0    ''
    Const INTERNET_DEFAULT_HTTP_PORT   = 80   ''
    Const INTERNET_DEFAULT_HTTPS_PORT  = 443  ''
    Const INTERNET_DEFAULT_FTP_PORT    = 21   ''
    Const INTERNET_DEFAULT_SOCKS_PORT  = 1080 ''

    Const INTERNET_FLAG_RELOAD         = &80000000
    Const INTERNET_FLAG_NO_CACHE_WRITE = &04000000
    Const INTERNET_FLAG_PRAGMA_NOCACHE = &00000100
    Const INTERNET_FLAG_NO_COOKIES     = &00080000
    Const INTERNET_FLAG_SECURE         = &00800000

    Const INTERNET_OPTION_CONNECT_TIMEOUT = 2
    Const INTERNET_OPTION_SEND_TIMEOUT    = 5
    Const INTERNET_OPTION_RECEIVE_TIMEOUT = 6
    Const INTERNET_OPTION_SECURITY_FLAGS  = 31
    Const SECURITY_FLAG_IGNORE_UNKNOWN_CA = &100

    Const HTTP_ADDREQ_FLAG_ADD_IF_NEW              = &10000000
    Const HTTP_ADDREQ_FLAG_ADD                     = &20000000
    Const HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA     = &40000000
    Const HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = &01000000
    Const HTTP_ADDREQ_FLAG_REPLACE                 = &80000000

    Const HTTP_QUERY_STATUS_CODE      = 19
    Const HTTP_QUERY_STATUS_TEXT      = 20
    Const HTTP_QUERY_RAW_HEADERS      = 21
    Const HTTP_QUERY_RAW_HEADERS_CRLF = 22

    Const CONNECTION_TIMEOUT_MILLIS = 60000

    'Status'
        Const HTTP_STATUS_CONTINUE         = 100
        Const HTTP_STATUS_SWITCH_PROTOCOLS = 101

        Const HTTP_STATUS_OK              = 200
        Const HTTP_STATUS_CREATED         = 201
        Const HTTP_STATUS_ACCEPTED        = 202
        Const HTTP_STATUS_PARTIAL         = 203
        Const HTTP_STATUS_NO_CONTENT      = 204
        Const HTTP_STATUS_RESET_CONTENT   = 205
        Const HTTP_STATUS_PARTIAL_CONTENT = 206

        Const HTTP_STATUS_AMBIGUOUS          = 300
        Const HTTP_STATUS_MOVED              = 301
        Const HTTP_STATUS_REDIRECT           = 302
        Const HTTP_STATUS_REDIRECT_METHOD    = 303
        Const HTTP_STATUS_NOT_MODIFIED       = 304
        Const HTTP_STATUS_USE_PROXY          = 305
        Const HTTP_STATUS_REDIRECT_KEEP_VERB = 307

        Const HTTP_STATUS_BAD_REQUEST       = 400
        Const HTTP_STATUS_DENIED            = 401
        Const HTTP_STATUS_PAYMENT_REQ       = 402
        Const HTTP_STATUS_FORBIDDEN         = 403
        Const HTTP_STATUS_NOT_FOUND         = 404
        Const HTTP_STATUS_BAD_METHOD        = 405
        Const HTTP_STATUS_NONE_ACCEPTABLE   = 406
        Const HTTP_STATUS_PROXY_AUTH_REQ    = 407
        Const HTTP_STATUS_REQUEST_TIMEOUT   = 408
        Const HTTP_STATUS_CONFLICT          = 409
        Const HTTP_STATUS_GONE              = 410
        Const HTTP_STATUS_LENGTH_REQUIRED   = 411
        Const HTTP_STATUS_PRECOND_FAILED    = 412
        Const HTTP_STATUS_REQUEST_TOO_LARGE = 413
        Const HTTP_STATUS_URI_TOO_LONG      = 414
        Const HTTP_STATUS_UNSUPPORTED_MEDIA = 415
        Const HTTP_STATUS_RETRY_WITH        = 449

        Const HTTP_STATUS_SERVER_ERROR    = 500
        Const HTTP_STATUS_NOT_SUPPORTED   = 501
        Const HTTP_STATUS_BAD_GATEWAY     = 502
        Const HTTP_STATUS_SERVICE_UNAVAIL = 503
        Const HTTP_STATUS_GATEWAY_TIMEOUT = 504
        Const HTTP_STATUS_VERSION_NOT_SUP = 505
    'Status'

    'POST Header'
        Const HTTP_QUERY_ACCEPT                    = 24
        Const HTTP_QUERY_ACCEPT_CHARSET            = 25
        Const HTTP_QUERY_ACCEPT_ENCODING           = 26
        Const HTTP_QUERY_ACCEPT_LANGUAGE           = 27
        Const HTTP_QUERY_ACCEPT_RANGES             = 42
        Const HTTP_QUERY_AGE                       = 48
        Const HTTP_QUERY_ALLOW                     = 7
        Const HTTP_QUERY_AUTHORIZATION             = 28
        Const HTTP_QUERY_CACHE_CONTROL             = 49
        Const HTTP_QUERY_CONNECTION                = 23
        Const HTTP_QUERY_CONTENT_BASE              = 50
        Const HTTP_QUERY_CONTENT_DESCRIPTION       = 4
        Const HTTP_QUERY_CONTENT_DISPOSITION       = 47
        Const HTTP_QUERY_CONTENT_ENCODING          = 29
        Const HTTP_QUERY_CONTENT_ID                = 3
        Const HTTP_QUERY_CONTENT_LANGUAGE          = 6
        Const HTTP_QUERY_CONTENT_LENGTH            = 5
        Const HTTP_QUERY_CONTENT_LOCATION          = 51
        Const HTTP_QUERY_CONTENT_MD5               = 52
        Const HTTP_QUERY_CONTENT_RANGE             = 53
        Const HTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2
        Const HTTP_QUERY_CONTENT_TYPE              = 1
        Const HTTP_QUERY_COOKIE                    = 44
        Const HTTP_QUERY_COST                      = 15
        Const HTTP_QUERY_CUSTOM                    = 65535
        Const HTTP_QUERY_DATE                      = 9
        Const HTTP_QUERY_DERIVED_FROM              = 14
        Const HTTP_QUERY_ECHO_HEADERS              = 73
        Const HTTP_QUERY_ECHO_HEADERS_CRLF         = 74
        Const HTTP_QUERY_ECHO_REPLY                = 72
        Const HTTP_QUERY_ECHO_REQUEST              = 71
        Const HTTP_QUERY_ETAG                      = 54
        Const HTTP_QUERY_EXPECT                    = 68
        Const HTTP_QUERY_EXPIRES                   = 10
        Const HTTP_QUERY_FORWARDED                 = 30
        Const HTTP_QUERY_FROM                      = 31
        Const HTTP_QUERY_HOST                      = 55
        Const HTTP_QUERY_IF_MATCH                  = 56
        Const HTTP_QUERY_IF_MODIFIED_SINCE         = 32
        Const HTTP_QUERY_IF_NONE_MATCH             = 57
        Const HTTP_QUERY_IF_RANGE                  = 58
        Const HTTP_QUERY_IF_UNMODIFIED_SINCE       = 59
        Const HTTP_QUERY_LAST_MODIFIED             = 11
        Const HTTP_QUERY_LINK                      = 16
        Const HTTP_QUERY_LOCATION                  = 33
        Const HTTP_QUERY_MAX                       = 78
        Const HTTP_QUERY_MAX_FORWARDS              = 60
        Const HTTP_QUERY_MESSAGE_ID                = 12
        Const HTTP_QUERY_MIME_VERSION              = 0
        Const HTTP_QUERY_ORIG_URI                  = 34
        Const HTTP_QUERY_PRAGMA                    = 17
        Const HTTP_QUERY_PROXY_AUTHENTICATE        = 41
        Const HTTP_QUERY_PROXY_AUTHORIZATION       = 61
        Const HTTP_QUERY_PROXY_CONNECTION          = 69
        Const HTTP_QUERY_PUBLIC                    = 8
        Const HTTP_QUERY_RANGE                     = 62
        Const HTTP_QUERY_RAW_HEADERS               = 21
        Const HTTP_QUERY_RAW_HEADERS_CRLF          = 22
        Const HTTP_QUERY_REFERER                   = 35
        Const HTTP_QUERY_REFRESH                   = 46
        Const HTTP_QUERY_REQUEST_METHOD            = 45
        Const HTTP_QUERY_RETRY_AFTER               = 36
        Const HTTP_QUERY_SERVER                    = 37
        Const HTTP_QUERY_SET_COOKIE                = 43
        Const HTTP_QUERY_STATUS_CODE               = 19
        Const HTTP_QUERY_STATUS_TEXT               = 20
        Const HTTP_QUERY_TITLE                     = 38
        Const HTTP_QUERY_TRANSFER_ENCODING         = 63
        Const HTTP_QUERY_UNLESS_MODIFIED_SINCE     = 70
        Const HTTP_QUERY_UPGRADE                   = 64
        Const HTTP_QUERY_URI                       = 13
        Const HTTP_QUERY_USER_AGENT                = 39
        Const HTTP_QUERY_VARY                      = 65
        Const HTTP_QUERY_VERSION                   = 18
        Const HTTP_QUERY_VIA                       = 66
        Const HTTP_QUERY_WARNING                   = 67
        Const HTTP_QUERY_WWW_AUTHENTICATE          = 40
    'POST Header'

    Const INTERNET_ERROR_BASE                    = 12000                     ''
    Const ERROR_INTERNET_TIMEOUT                 = (INTERNET_ERROR_BASE + 2) ''
    Const ERROR_INTERNET_INTERNAL_ERROR          = (INTERNET_ERROR_BASE + 4) ''
    Const ERROR_INTERNET_INVALID_URL             = (INTERNET_ERROR_BASE + 5) ''
    Const ERROR_INTERNET_UNRECOGNIZED_SCHEME     = (INTERNET_ERROR_BASE + 6) ''
    Const ERROR_INTERNET_NAME_NOT_RESOLVED       = (INTERNET_ERROR_BASE + 7) ''
    Const ERROR_INTERNET_SHUTDOWN                = (INTERNET_ERROR_BASE + 12) ''
    Const ERROR_INTERNET_LOGIN_FAILURE           = (INTERNET_ERROR_BASE + 15) ''
    Const ERROR_INTERNET_OPERATION_CANCELLED     = (INTERNET_ERROR_BASE + 17) ''
    Const ERROR_INTERNET_INCORRECT_HANDLE_TYPE   = (INTERNET_ERROR_BASE + 18) ''
    Const ERROR_INTERNET_INCORRECT_HANDLE_STATE  = (INTERNET_ERROR_BASE + 19) ''
    Const ERROR_INTERNET_CANNOT_CONNECT          = (INTERNET_ERROR_BASE + 29) ''
    Const ERROR_INTERNET_CONNECTION_ERROR        = (INTERNET_ERROR_BASE + 30) ''
    Const ERROR_INTERNET_RESEND_REQUEST          = (INTERNET_ERROR_BASE + 32) ''
    Const ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED = (INTERNET_ERROR_BASE + 44) ''
    Const ERROR_INTERNET_SECURE_FAILURE          = (INTERNET_ERROR_BASE + 175) ''
    Const ERROR_INTERNET_RESPONSE_DRAIN_OVERFLOW = (INTERNET_ERROR_BASE + 184) ''
    Const ERROR_INVALID_PARAMETER                = 87                         ''
    Const ERROR_NOT_ENOUGH_MEMORY                = 8                          ''
    Const ERROR_INSUFFICIENT_BUFFER              = 122
'Constantes HTTP


Archivo APIS.cml <- Se recomienda que tengan un archivo propio de APIS (y que sea global), donde puedan poner todas las APIS que no contenta Cramel por defecto.
Código (Cramel) [Seleccionar]
'/**
' * APIS para el HTTP Request
' *
' * @author  Jovani Pérez Damián (@BlackBlex)
' *
' * ==============Information==============
' *      Filename: APIS.cml
' * ---------------------------------------
'*/

'APIS HTTP'
    API InternetOpen(sAgent:Cadena, lAccessType:Entero, sProxyName:Cadena, sProxyBypass:Cadena, lFlags:Entero):Entero, "wininet.dll" "InternetOpenA"
    API InternetConnect(hInternetSession:Entero, sServerName:Cadena, nServerPort:Entero, sUsername:Cadena, sPassword:Cadena, lService:Entero, lFlags:Entero, lContext:Entero):Entero, "wininet.dll" "InternetConnectA"
    API InternetCloseHandle(hInet:Entero):Entero, "wininet.dll"
    API InternetQueryDataAvailable(hHttpRequest:Entero, lNumberOfBytesAvailable:Entero, lFlags:Entero, lContext:Entero):Entero, "wininet.dll"
    API InternetReadFile(hFile:Entero, sBuffer:Entero, lNumBytesToRead:Entero, lNumberOfBytesRead:Entero):Entero, "wininet.dll"
    API InternetQueryOption(hHttpRequest:Entero, dwOption:Entero, lpBuffer:Entero, dwBufferLength:Entero):Entero, "wininet.dll" "InternetQueryOptionA"
    API InternetSetOption(hHttpRequest:Entero, dwOption:Entero, lpBuffer:Entero, dwBufferLength:Entero):Entero, "wininet.dll" "InternetSetOptionA"
    API HttpOpenRequest(hHttpSession:Entero, sVerb:Cadena, sObjectName:Cadena, sVersion:Cadena, sReferer:Cadena, sAcceptTypes:Cadena, lFlags:Entero, lContext:Entero):Entero, "wininet.dll" "HttpOpenRequestA"
    API HttpAddRequestHeaders(hHttpRequest:Entero, sHeaders:Cadena, lHeadersLength:Entero, lModifiers:Entero):Entero, "wininet.dll" "HttpAddRequestHeadersA"
    API HttpSendRequest(hHttpRequest:Entero, sHeaders:Cadena, lHeadersLength:Entero, sOptional:Cadena, lOptionalLength:Entero):Entero, "wininet.dll" "HttpSendRequestA"
    API HttpQueryInfo(hHttpRequest:Entero, lInfoLevel:Entero, lBuffer:Entero, lBufferLength:Entero, lIndex:Entero), "wininet.dll" "HttpQueryInfoA"
    API HttpEndRequest(hHttpRequest:Entero, lpBuffersOut:Entero, dwFlags:Entero, dwContext:Entero):Entero, "wininet.dll" "HttpEndRequestA"
'APIS HTTP'


Y aquí un ejemplo usando HTTPRequest.cml
Código (Cramel) [Seleccionar]
Importar "Cramel.cml"
Importar "MSVBVM60\MSVBVM60.cml"
Importar "Constantes.cml"
Importar "APIS.cml"
Importar "HTTPRequest.cml"

Var request:HTTP
Var text:Cadena

Crear request
    request.Metodo = "POST"
    request.Parametros = "test=Hola"
    request.Puerto = INTERNET_DEFAULT_HTTP_PORT
    request.Servidor = "localhost"
    request.Dirección = "/index.php"
    request.Agente = "CramelRequest [POST]"

    Si ( request.Conectar ) Entonces
        Si ( request.Enviar ) Entonces
            text = request.LeerRespuesta
            Si ( request.StatusCode = HTTP_STATUS_NOT_FOUND ) Entonces
                Mensaje("La dirección es incorrecta")
            SiNo
                Mensaje(EntCad(request.StatusCode) + CRLF + request.StatusText + CRLF + "Tamaño de respuesta: " + EntCad(request.TamañoPagina) + CRLF + text)
            FinSi
        SiNo
            Mensaje(request.Error)
        FinSi
    SiNo
        Mensaje(request.Error)
    FinSi

Destruir request


(http://i.imgur.com/3Nw3jSa.png)
(http://i.imgur.com/AlZTc5Z.png)

Gracias a @Yuki - Por su antigua librería de HTTP de la cual solo me toco portar a Cramel.

Cualquier sugerencia, o error, comenten.
Título: Re:[Cramel] HTTPRequest.cml ~ Haz peticiones GET & POST
Publicado por: 79137913 en Junio 26, 2017, 08:57:25 AM
HOLA!!!

Gran Aporte @Yuki (https://underc0de.org/foro/index.php?action=profile;u=42639) podria ponerla como libreria precargada en la prox version!

GRACIAS POR LEER!!!
Título: Re:[Cramel] HTTPRequest.cml ~ Haz peticiones GET & POST
Publicado por: Yuki en Junio 26, 2017, 06:01:28 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

Gran Aporte @Yuki (https://underc0de.org/foro/index.php?action=profile;u=42639) podria ponerla como libreria precargada en la prox version!

GRACIAS POR LEER!!!

Si, cuando la vi me puse manos a la obra, la modifique un poco y la documente. Solo falta que yo suba la nueva versión  :D