[Cramel] HTTPRequest.cml ~ Haz peticiones GET & POST

Iniciado por BlackBlex, Junio 26, 2017, 12:53:10 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 26, 2017, 12:53:10 AM Ultima modificación: Junio 26, 2017, 01:05:59 AM por BlackBlex
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:

  • Conectar(Opcional Usuario:Cadena = Nulo, Opcional Contraseña:Cadena = Nulo) - Establece una conexión con el servidor
  • Enviar - Envía la petición a la dirección establecida
  • LeerRespuesta - Devuelve la pagina (el código fuente) resultante de la petición

Tiene las siguientes Propiedades:

  • Version - Establece o devuelve la versión del HTTP que se usará para la petición | HTTP/1.0 - HTTP/1.1
  • Agente - Establece o devuelve el nombre de la aplicación | User-Agent
  • Servidor - Establece o devuelve la dirección del servidor al que se hará la petición | No debe incluirse el http://
  • Puerto - Establece o devuelve el puerto usado en la petición | Por defecto 80
  • Metodo - Establece o devuelve el método usado para hacer la petición | GET - POST
  • Parametros - Establece los parametros que se usaran para la petición | [/index.php?test=Hola
  • Dirección - Establece o devuelve la dirección a la que se hará la petición, ya sea a una carpeta o archivo | Ejemplo: /index.php | Nota: debe llevar el / al prinicipio
  • Error - Devuelve el error que sucedió si algo no salió bien
  • StatusCode - Devuelve el código de estado de la petición
  • StatusText - Devuelve el texto referente al código de estado
  • TamañoPagina - Devuelve el tamaño que tiene la pagina resultante de la petición, solo si no hubo redirección por en medio

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
'/**
' * 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
'/**
' * 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
'/**
' * 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
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





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

Cualquier sugerencia, o error, comenten.

HOLA!!!

Gran Aporte @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta podria ponerla como libreria precargada en la prox version!

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

Gran Aporte @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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