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