Beispiel #1
0
        /// <summary>
        ///		Obtiene la salida de una URL
        /// </summary>
        internal static MLFile GetResponse(TwitterAccount objAccount, string strURL, ParameterDataCollection objColParameters, bool blnPost)
        {
            try
                {	RestController objController = new RestController();
                    oAuthAuthenticator objAuthenticator = new oAuthAuthenticator();
                    RequestMessage objRequest = new RequestMessage(RequestMessage.MethodType.Get, strURL);
                    ResponseMessage objResponse;

                        // Asigna las propiedades al autentificador
                            objAuthenticator.ConsumerKey = objAccount.Manager.OAuthConsumerKey;
                            objAuthenticator.ConsumerSecret = objAccount.Manager.OAuthConsumerSecret;
                            objAuthenticator.AccessToken = objAccount.OAuthToken;
                            objAuthenticator.AccessTokenSecret = objAccount.OAuthTokenSecret;
                        // Asigna el autentificador
                            objController.Authenticator = objAuthenticator;
                        // Asigna el método de envío
                            if (blnPost)
                                objRequest.Method = RequestMessage.MethodType.Post;
                        // Asigna los parámetros
                            if (objColParameters != null)
                                foreach (ParameterData objParameter in objColParameters)
                                    objRequest.QueryParameters.Add(objParameter.Key, objParameter.Value);
                        // Envía el mensaje
                            objResponse = objController.Send(objRequest);
                        // Devuelve el documento JSON
                            if (objResponse.IsError)
                                return GetError("Error en la recepción. Status: " + objResponse.ErrorDescription);
                            else
                                return new Bau.Libraries.LibMarkupLanguage.MLSerializer().ParseText(objResponse.Body);
                    }
                catch (Exception objException)
                    { return GetError(objException);
                    }
        }
Beispiel #2
0
        /// <summary>
        ///		Envía un mensaje por HTTP
        /// </summary>
        internal ResponseMessage Send(RestController objController, RequestMessage objRequest)
        {
            ResponseMessage objResult;
            HttpWebRequest objHttpRequest = System.Net.WebRequest.Create(objRequest.GetUrlWithQueryString(true)) as HttpWebRequest;
            byte[] arrBytPostData;

                // Asigna el delegado que trata los errores de certificados en conexiones SSL
                    ServicePointManager.ServerCertificateValidationCallback =
                                      delegate(object objSender, X509Certificate objCertificate,
                                               X509Chain objChain, SslPolicyErrors objSslPolicyErrors)
                                        { return true; // ... descarta todos los errores
                                        };
                // Añade el certificado si es necesario
                    if (!string.IsNullOrEmpty(objController.CertificateFileName))
                        objHttpRequest.ClientCertificates.Add(new X509Certificate2(objController.CertificateFileName));
                // Asigna el proxy
                    if (objController.Proxy.Enabled)
                        { // Crea el proxy
                                objHttpRequest.Proxy = new WebProxy(objController.Proxy.Address, objController.Proxy.MustBypassLocal);
                            // Asigna las credenciales del proxy
                                if (!string.IsNullOrEmpty(objController.Proxy.User))
                                    objHttpRequest.Proxy.Credentials = new NetworkCredential(objController.Proxy.User, objController.Proxy.Password);
                                else
                                    objHttpRequest.UseDefaultCredentials = true;
                        }
                // Asigna las propiedades
                    objHttpRequest.Method = objRequest.MethodDescription;
                    objHttpRequest.ServicePoint.Expect100Continue = false;
                    if (objRequest.Method == RequestMessage.MethodType.Post || objRequest.Method == RequestMessage.MethodType.Put)
                        objHttpRequest.SendChunked = true;
                    objHttpRequest.UserAgent = objController.UserAgent;
                    objHttpRequest.Timeout = objController.TimeOut;
                    objHttpRequest.KeepAlive = true;
                // Procesa la autentificación
                    if (objController.Authenticator != null)
                        objController.Authenticator.Process(objRequest);
                // Asigna el content-type de la solicitud
                    if (!objRequest.ContentType.IsEmpty())
                        objHttpRequest.ContentType = objRequest.ContentType;
                // Obtiene los datos a enviar
                    arrBytPostData = GetPostData(objHttpRequest, objRequest);
                // Añade la longitud
                    if (arrBytPostData != null)
                        objHttpRequest.ContentLength = arrBytPostData.Length;
                // Asigna las cabeceras
                    AddHeaders(objHttpRequest, objRequest.Headers);
                // Escribe los datos
                    WritePostData(objHttpRequest, arrBytPostData);
                // Obtiene los datos de la respuesta
                    objResult = GetResponse(objHttpRequest);
                // Cierra la solicitud Web
                    objHttpRequest = null;
                // Devuelve los datos de salida
                    return objResult;
        }
        /// <summary>
        ///		Obtiene el token de acceso a partir de un PIN
        /// </summary>
        public bool GetAccessToken(string strUrlRequestAccessToken, string strPin, out string strOAuthToken, out string strOAuthTokenSecret)
        {
            RequestMessage objRequest = new RequestMessage(RequestMessage.MethodType.Post, strUrlRequestAccessToken);
            ResponseMessage objResponse;

                // Añade los parámetros
                    objRequest.QueryParameters.Add("oauth_verifier", strPin);
                // Envía el mensaje al servidor
                    objResponse = GetResponseOAuth(objRequest);
                // Obtiene los tokens de la respuesta
                    ExtractTokensAccess(objResponse,  out strOAuthToken, out strOAuthTokenSecret);
                // Devuelve el valor que indica si todo ha ido correcto
                    return !strOAuthToken.IsEmpty() && !strOAuthTokenSecret.IsEmpty();
        }
Beispiel #4
0
 /// <summary>
 ///		Envía un mensaje
 /// </summary>
 public Messages.ResponseMessage Send(Messages.RequestMessage objRequest)
 {
     return(new Http.HttpSender().Send(this, objRequest));
 }
        /// <summary>
        ///		Obtiene los tokens de autorización a Twitter para que la aplicación pueda validar un usuario
        /// </summary>
        public bool GetAuthorizationTokens(string strUrlRequestToken, string strUrlCallBack, out string strOAuthToken, out string strOAuthTokenSecret)
        {
            RequestMessage objRequest = new RequestMessage(RequestMessage.MethodType.Post, strUrlRequestToken);
            ResponseMessage objResponse;

                // Añade los parámetros
                    objRequest.QueryParameters.Add("oaut_callback", strUrlCallBack);
                // Envía el mensaje al servidor
                    objResponse = GetResponseOAuth(objRequest);
                // Si todo ha ido bien, el servidor oAuth nos responde con una cadena del tipo: oauth_token=xxx&oauth_token_secret=xxx&oauth_callback_confirmed=true
                    ExtractTokensAccess(objResponse, out strOAuthToken, out strOAuthTokenSecret);
                // Devuelve la cadena
                    return !strOAuthToken.IsEmpty() && !strOAuthTokenSecret.IsEmpty();
        }
        /// <summary>
        ///		Envía una solicitud Web utilizando oAuth
        /// </summary>
        private ResponseMessage GetResponseOAuth(RequestMessage objRequest)
        {
            RestController objRestController = new RestController("BauRest", 20000, this);

                // Devuelve la respuesta del servidor
                    return objRestController.Send(objRequest);
        }
        /// <summary>
        ///		Procesa la autentificación
        /// </summary>
        public void Process(RequestMessage objRequest)
        {
            string strNonce, strTimestamp, strSignature;

                // Inicializa los valores aleatorios
                    strNonce = new Random().Next(int.MaxValue).ToString("X"); // 123400, 9999999
                    strTimestamp = ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString();
                // Genera la firma
                    strSignature = GetSignature(GetDataToSign(objRequest.MethodDescription, objRequest.URL, objRequest.QueryParameters, strNonce, strTimestamp));
                // Añade la cabecera de autorización
                    objRequest.Headers.Add("Authorization", GetAuthorizationData(strSignature, strNonce, strTimestamp));
        }
Beispiel #8
0
 public Instruction()
 {
     Request = new RequestMessage(RequestMessage.MethodType.Get, null);
 }
Beispiel #9
0
 /// <summary>
 ///		Muestra la solicitud
 /// </summary>
 private void ShowRequest(RequestMessage objRequest)
 {
     // Log
         AddLog("Solicitud");
     // Datos del mensaje
         ShowMessage(objRequest);
 }
Beispiel #10
0
        /// <summary>
        ///		Escribe los datos de envío sobre el stream de la solicitud
        /// </summary>
        private byte[] GetPostData(HttpWebRequest objHttpRequest, RequestMessage objRequest)
        {
            byte [] arrBytParameters = null;

                // Añade los datos según el método de envío
                    if (objRequest.Attachments.Count == 0)
                        { if (objRequest.Method == RequestMessage.MethodType.Post) // ... en el método POST se envía un formulario
                                { // Asigna el tipo de contenido
                                        if (objRequest.QueryParameters.Count != 0)
                                            objHttpRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                                    // Codifica los parámetros
                                        arrBytParameters = EncodePostData(objRequest.QueryParameters, objRequest.Body);
                                }
                        }
                    else
                        { string strBoundary = "-----------------------------" + DateTime.Now.Ticks.ToString("x");

                                // Asigna el tipo de contenido
                                    objHttpRequest.ContentType = "multipart/form-data; boundary=" + strBoundary;
                                // Obtiene el contenido
                                    arrBytParameters = GetMultipartFormData(strBoundary, objRequest.QueryParameters, objRequest.Attachments);
                        }
                // Escribe los datos a enviar sobre la solicitud
                    return arrBytParameters;
        }