//Method to ensure our request was successful. Returns true if successful. If unsuccessful, logs the error and returns false. internal bool validateResponse(PandoraResponse response) { bool isOK = false; if (response != null) { //stat property of response will determine whether or not request was successful. "ok" indicates success. All other values are fails. if (response.stat == "ok") { //Response is valid log(String.Format("Request successful. Result type: {0}", response.result.GetType().ToString())); isOK = true; } else { //Response is not valid. log(String.Format("Error occurred while making request: {0}", Errors.getDescription(response.code))); //log(String.Format("Error validating response. Code: {0}, message: {1}, description: {2]", response.code, response.message, Errors.getDescription(response.code))); } } else { log("Error validating response. Null response received."); } return(isOK); }
public PandoraResponse doPost(PandoraRequest data) { try { //Build URL string url = data.Protocol + Config.BaseURL + data.getURLParameters(); Type expectedResponseType = data.expectedResponseType; //Convert data to raw bytes so we can stream it to the request, encrypting as necessary byte[] databuffer = serializeRequestObject(data); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //Set the request headers request.Method = Config.RequestMethod; request.UserAgent = Config.RequestUserAgent; request.ContentType = Config.RequestContentType; request.Accept = Config.RequestAccept; request.ContentLength = databuffer.Length; //Get the request stream and send out data Stream stream = request.GetRequestStream(); stream.Write(databuffer, 0, databuffer.Length); stream.Close(); //Get the response WebResponse resp = request.GetResponse(); StreamReader reader = new StreamReader(resp.GetResponseStream()); string rawResponse = reader.ReadToEnd(); PandoraResponse response = JsonConvert.DeserializeObject <PandoraResponse>(rawResponse); //Debug //Console.WriteLine(url); //Console.WriteLine(rawResponse); if (response.stat == "ok") { IPandoraResponseResult resultObj = (IPandoraResponseResult)Activator.CreateInstance(expectedResponseType); resultObj.populate(Convert.ToString(response.result)); response.result = resultObj; } return(response); }catch (PandoraRequestURLFormatException eURL) { log("Couldn't do post -"); log("Malformed URL."); return(null); } }
/// <summary> /// Creates an exception from the given server response object. /// </summary> /// <param name="response"></param> internal PandoraException(PandoraResponse response) { try { if (response == null) { throw new PandoraException("Attempted to parse null response."); } if (response.Success) { throw new PandoraException("Attempted to parse error from successful response."); } _message = response.ErrorMessage; _errorCode = (ErrorCodeEnum)response.ErrorCode; } catch (Exception e) { throw new PandoraException("Failed parsing error response.", e); } }
private PandoraData ExecuteRequest(PandoraRequest request, WebProxy proxy) { try { ASCIIEncoding encoder = new ASCIIEncoding(); // build url for request to pandora servers string prefix = request.IsSecure ? "https://" : "http://"; string url = prefix + baseUrl; url += "method=" + request.MethodName; if (request.User != null) { url += String.Format("&user_id={0}", HttpUtility.UrlEncode(request.User.Id)); } if (request.Session != null) { url += String.Format("&auth_token={0}", HttpUtility.UrlEncode(request.UserAuthToken == null ? request.Session.PartnerAuthToken : request.UserAuthToken)); url += String.Format("&partner_id={0}", request.Session.PartnerId); } // build the post data for our request JsonSerializerSettings settings = new JsonSerializerSettings(); settings.NullValueHandling = NullValueHandling.Ignore; string postStr = JsonConvert.SerializeObject(request, settings); byte[] postData = encoder.GetBytes(request.IsEncrypted ? encrypter.Encrypt(postStr) : postStr); // configure our connection ServicePointManager.Expect100Continue = false; WebRequest webRequest = WebRequest.Create(url); webRequest.ContentType = "text/xml"; webRequest.ContentLength = postData.Length; webRequest.Method = "POST"; if (proxy != null) { webRequest.Proxy = proxy; } // send request to remote servers Stream os = webRequest.GetRequestStream(); os.Write(postData, 0, postData.Length); os.Close(); // retrieve reply from servers using (WebResponse response = webRequest.GetResponse()) { StreamReader sr = new StreamReader(response.GetResponseStream()); string replyStr = sr.ReadToEnd(); PandoraResponse reply = JsonConvert.DeserializeObject <PandoraResponse>(replyStr); // parse and throw any errors or return our result if (!reply.Success) { //Console.WriteLine(url); throw new PandoraException(reply); } if (request.ReturnType == null) { return(null); } return((PandoraData)JsonConvert.DeserializeObject(reply.Result.ToString(), request.ReturnType)); } } catch (Exception ex) { if (ex is PandoraException) { throw; } throw new PandoraException("Unexpected error communicating with server.", ex); } }