/// <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); } }
/// <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(); }
/// <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)); }
public Instruction() { Request = new RequestMessage(RequestMessage.MethodType.Get, null); }
/// <summary> /// Muestra la solicitud /// </summary> private void ShowRequest(RequestMessage objRequest) { // Log AddLog("Solicitud"); // Datos del mensaje ShowMessage(objRequest); }
/// <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; }