public string getHTTP(string szURL) { HttpWebRequest HttpRequest; HttpWebResponse httpResponse; string BodtText = null; Int32 Bytes; Stream ResponseStream; byte[] RecvByte = new byte[byte.MaxValue + 1]; HttpRequest = (HttpWebRequest)WebRequest.Create(szURL); httpResponse = (HttpWebResponse)HttpRequest.GetResponse(); ResponseStream = httpResponse.GetResponseStream(); while ((true)) { Bytes = ResponseStream.Read(RecvByte, 0, RecvByte.Length); if (Bytes <= 0) { break; } BodtText += System.Text.Encoding.UTF8.GetString (RecvByte, 0, Bytes); } return(BodtText); }
internal override void DeseralizeFromStream() { DiagnoseHelper.CheckReference(ResponseStream, "Can not get response stream"); ResponseStream.Seek(0, SeekOrigin.Begin); ContentTypeEntity ct = new ContentTypeEntity(OriginalResponse.ContentType); int contentLen = (int)OriginalResponse.ContentLength; //DiagnoseHelper.CheckStringIgnoreCase(ct.ContentType, HttpLayer.JSonContentType, "Login response content type is not correct"); byte[] buffer = null; if (contentLen != -1) { buffer = new byte[contentLen]; int leftLen = contentLen; while (leftLen != 0) { int readLen = ResponseStream.Read(buffer, 0, leftLen); leftLen -= readLen; if (leftLen != 0) { LogHelper.OnlineLogger.Debug("ToDo:: can not read all data in once, need to sleep!" + HttpLayer.LogRequetId(ResponseId)); } } } else { List <byte> buffList = new List <byte>(); int tempBufLen = 10 * 1024; byte[] bufTemp = new byte[tempBufLen]; int readLen = 0; while ((readLen = ResponseStream.Read(bufTemp, 0, tempBufLen)) != 0) { if (readLen == tempBufLen) { buffList.AddRange(bufTemp); } else { buffList.AddRange(bufTemp.Take(readLen)); } } buffer = buffList.ToArray(); contentLen = buffList.Count; } string sResult = ct.Encoding.GetString(buffer, 0, contentLen); DiagnoseHelper.CheckString(sResult, "Login response content is empty"); this.Object = JsonConvert.DeserializeObject <JObject>(sResult); }
/// <summary> /// 获取数据内容 /// </summary> void GetRespones() { //这个位置上基本就是最耗时的部分了. request.BeginGetResponse using (response = (HttpWebResponse)request.GetResponse()) { //如果为so就不解析数据 if (!HttpItem.IsSoMode) { using (memoryStream = new MemoryStream()) { #region 处理压缩过的流 Stream ResponseStream; if (response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)) { ResponseStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress); } else if (response.ContentEncoding.Equals("deflate", StringComparison.InvariantCultureIgnoreCase)) { ResponseStream = new DeflateStream(response.GetResponseStream(), CompressionMode.Decompress); } else { ResponseStream = response.GetResponseStream(); } #endregion #region 还原压缩的数据 //这个位置上基本就是最耗时的部分了. using (ResponseStream) { buffer = new byte[1024]; int readCount = ResponseStream.Read(buffer, 0, buffer.Length); while (readCount > 0) { memoryStream.Write(buffer, 0, readCount); readCount = ResponseStream.Read(buffer, 0, buffer.Length); } } #endregion httpResult.BytesResult = memoryStream.ToArray(); } } httpResult.StatusCode = response.StatusCode; httpResult.ResponseHeader = response.Headers; response.Close(); } if (request.HaveResponse) { request.Abort(); } GC.Collect(); }
public void SaveFile(string fileId, string fileType, string downloadUrl, Stream stream) { Global.Logger.Debug("GoogleDriveApp: save file stream " + fileId + (stream == null ? " from - " + downloadUrl : " from stream")); fileId = ThirdPartySelector.GetFileId(fileId); var token = Token.GetToken(AppAttr); var driveFile = GetDriveFile(fileId, token); if (driveFile == null) { Global.Logger.Error("GoogleDriveApp: file is null"); throw new Exception("File not found"); } var jsonFile = JObject.Parse(driveFile); var currentType = GetCorrectExt(jsonFile); if (!fileType.Equals(currentType)) { try { var key = DocumentServiceConnector.GenerateRevisionId(downloadUrl ?? Guid.NewGuid().ToString()); if (stream != null) { using (var tmpStream = new MemoryStream()) { stream.CopyTo(tmpStream); Global.Logger.Debug("GoogleDriveApp: GetExternalUri format: " + fileType); downloadUrl = DocumentServiceConnector.GetExternalUri(tmpStream, fileType, key); } } Global.Logger.Debug("GoogleDriveApp: GetConvertedUri from " + fileType + " to " + currentType + " - " + downloadUrl); DocumentServiceConnector.GetConvertedUri(downloadUrl, fileType, currentType, key, false, out downloadUrl); stream = null; } catch (Exception e) { Global.Logger.Error("GoogleDriveApp: Error convert", e); } } var request = (HttpWebRequest)WebRequest.Create(GoogleLoginProvider.GoogleUrlFileUpload + "/{fileId}?uploadType=media".Replace("{fileId}", fileId)); request.Method = "PATCH"; request.Headers.Add("Authorization", "Bearer " + token); request.ContentType = MimeMapping.GetMimeMapping(currentType); if (stream != null) { request.ContentLength = stream.Length; const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; while ((readed = stream.Read(buffer, 0, bufferSize)) > 0) { request.GetRequestStream().Write(buffer, 0, readed); } } else { var downloadRequest = (HttpWebRequest)WebRequest.Create(downloadUrl); using (var downloadStream = new ResponseStream(downloadRequest.GetResponse())) { request.ContentLength = downloadStream.Length; const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; while ((readed = downloadStream.Read(buffer, 0, bufferSize)) > 0) { request.GetRequestStream().Write(buffer, 0, readed); } } } try { using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) { string result = null; if (responseStream != null) { using (var readStream = new StreamReader(responseStream)) { result = readStream.ReadToEnd(); } } Global.Logger.Debug("GoogleDriveApp: save file stream response - " + result); } } catch (WebException e) { Global.Logger.Error("GoogleDriveApp: Error save file stream", e); request.Abort(); var httpResponse = (HttpWebResponse)e.Response; if (httpResponse.StatusCode == HttpStatusCode.Forbidden) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException, e); } throw; } }
private static string ProcessMailMerge(string fileId, TrackerData fileData) { Guid userId; if (fileData.Users == null || fileData.Users.Count == 0 || !Guid.TryParse(fileData.Users[0], out userId)) { userId = FileTracker.GetEditingBy(fileId).FirstOrDefault(); } var sended = false; try { SecurityContext.AuthenticateMe(userId); if (string.IsNullOrEmpty(fileData.Url)) { throw new ArgumentException("emptry url"); } if (fileData.MailMerge == null) { throw new ArgumentException("MailMerge is null"); } var message = fileData.MailMerge.Message; Stream attach = null; switch (fileData.MailMerge.Type) { case MailMergeType.AttachDocx: case MailMergeType.AttachPdf: var downloadRequest = (HttpWebRequest)WebRequest.Create(DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); // hack. http://ubuntuforums.org/showthread.php?t=1841740 if (WorkContext.IsMono) { ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true; } using (var downloadStream = new ResponseStream(downloadRequest.GetResponse())) { const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; attach = new MemoryStream(); while ((readed = downloadStream.Read(buffer, 0, bufferSize)) > 0) { attach.Write(buffer, 0, readed); } attach.Position = 0; } if (string.IsNullOrEmpty(fileData.MailMerge.Title)) { fileData.MailMerge.Title = "Attach"; } var attachExt = fileData.MailMerge.Type == MailMergeType.AttachDocx ? ".docx" : ".pdf"; var curExt = FileUtility.GetFileExtension(fileData.MailMerge.Title); if (curExt != attachExt) { fileData.MailMerge.Title += attachExt; } break; case MailMergeType.Html: var httpWebRequest = (HttpWebRequest)WebRequest.Create(DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); // hack. http://ubuntuforums.org/showthread.php?t=1841740 if (WorkContext.IsMono) { ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true; } using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) using (var stream = httpWebResponse.GetResponseStream()) if (stream != null) { using (var reader = new StreamReader(stream, Encoding.GetEncoding(Encoding.UTF8.WebName))) { message = reader.ReadToEnd(); } } break; } using (var mailMergeTask = new MailMergeTask { From = fileData.MailMerge.From, Subject = fileData.MailMerge.Subject, To = fileData.MailMerge.To, Message = message, AttachTitle = fileData.MailMerge.Title, Attach = attach }) { var response = mailMergeTask.Run(); Global.Logger.InfoFormat("DocService mailMerge {0}/{1} send: {2}", fileData.MailMerge.RecordIndex + 1, fileData.MailMerge.RecordCount, response); } sended = true; } catch (Exception ex) { Global.Logger.Error( string.Format("DocService mailMerge{0} error: userId - {1}, url - {2}", (fileData.MailMerge == null ? "" : " " + fileData.MailMerge.RecordIndex + "/" + fileData.MailMerge.RecordCount), userId, fileData.Url), ex); } if (fileData.MailMerge != null && fileData.MailMerge.RecordIndex == fileData.MailMerge.RecordCount - 1) { var errorCount = fileData.MailMerge.RecordErrorCount; if (!sended) { errorCount++; } NotifyClient.SendMailMergeEnd(userId, fileData.MailMerge.RecordCount, errorCount); } return(sended ? "0" //error:0 - sended : "1"); //error:1 - some error }
public void SaveFile(string fileId, string downloadUrl) { Global.Logger.Debug("GoogleDriveApp: save file stream " + fileId + " from - " + downloadUrl); fileId = ThirdPartySelector.GetFileId(fileId); var token = Token.GetToken(AppAttr); var driveFile = GetDriveFile(fileId, token); if (driveFile == null) { Global.Logger.Error("GoogleDriveApp: file is null"); throw new Exception("File not found"); } var jsonFile = JObject.Parse(driveFile); var curExt = GetCorrectExt(jsonFile); var newExt = FileUtility.GetFileExtension(downloadUrl); if (curExt != newExt) { try { Global.Logger.Debug("GoogleDriveApp: GetConvertedUri from " + newExt + " to " + curExt + " - " + downloadUrl); var key = DocumentServiceConnector.GenerateRevisionId(downloadUrl); DocumentServiceConnector.GetConvertedUri(downloadUrl, newExt, curExt, key, false, out downloadUrl); } catch (Exception e) { Global.Logger.Error("GoogleDriveApp: Error convert", e); } } var downloadRequest = WebRequest.Create(downloadUrl); using (var downloadResponse = downloadRequest.GetResponse()) using (var downloadStream = new ResponseStream(downloadResponse)) { var request = (HttpWebRequest)WebRequest.Create(GoogleUrlUpload + "/{fileId}?uploadType=media".Replace("{fileId}", fileId)); request.Method = "PUT"; request.Headers.Add("Authorization", "Bearer " + token); request.ContentType = downloadResponse.ContentType; request.ContentLength = downloadResponse.ContentLength; const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; while ((readed = downloadStream.Read(buffer, 0, bufferSize)) > 0) { request.GetRequestStream().Write(buffer, 0, readed); } try { using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { var result = stream != null ? new StreamReader(stream).ReadToEnd() : null; Global.Logger.Debug("GoogleDriveApp: save file stream response - " + result); } } catch (WebException e) { Global.Logger.Error("GoogleDriveApp: Error save file stream", e); request.Abort(); var httpResponse = (HttpWebResponse)e.Response; if (httpResponse.StatusCode == HttpStatusCode.Forbidden) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException, e); } throw; } } }
public Task ContentDownloader(string UrlName, string WhereToSave, string FileName, int LimitedBytes) { return(Task.Factory.StartNew(() => { try { long FileSize = 0; int BufferSize = LimitedBytes; long ExistFileSize = 0; FileStream SaveFileStream; if (CheckExistingUrl(UrlName) == false) { throw new InvalidDataException(); } /*Check if the file already exist*/ if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), FileName))) { FileInfo FInfo = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), FileName)); /* Recieve how much size was already downloaded */ ExistFileSize = FInfo.Length; } /* If we already have some content in that file, we need to created that file only in append mode and to attach the rest of the content there*/ if (ExistFileSize > 0) { SaveFileStream = new FileStream(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), WhereToSave), FileName), FileMode.Append, FileAccess.Write, FileShare.ReadWrite); } /* If that file have size 0 means that is not created so we need to open that file in create mode and add that content*/ else { SaveFileStream = new FileStream(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), WhereToSave), FileName), FileMode.Create, FileAccess.Write, FileShare.ReadWrite); } HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(UrlName); /* Add the content after the existing length */ request.AddRange((int)ExistFileSize); Stream ResponseStream; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); ResponseStream = response.GetResponseStream(); FileSize = response.ContentLength; Console.WriteLine("We need to write " + FileSize + " bytes"); int Recieved; byte[] buffer = new byte[BufferSize]; int Sum = 0; while ((Recieved = ResponseStream.Read(buffer, 0, buffer.Length)) > 0) { SaveFileStream.Write(buffer, 0, Recieved); SaveFileStream.Flush(); Sum += Recieved; } if (Sum == FileSize) { Console.WriteLine("Successfully writed " + Sum + " bytes." + " File " + FileName + " was created"); } } catch { Console.WriteLine("Unsuccesffully writed file"); } } )); }
public void SaveFile(string fileId, string downloadUrl) { Global.Logger.Debug("GoogleDriveApp: save file stream " + fileId + " from - " + downloadUrl); fileId = ThirdPartySelector.GetFileId(fileId); var token = Token.GetToken(AppAttr); var driveFile = GetDriveFile(fileId, token); if (driveFile == null) { Global.Logger.Error("GoogleDriveApp: file is null"); throw new Exception("File not found"); } var jsonFile = JObject.Parse(driveFile); var curExt = GetCorrectExt(jsonFile); var newExt = FileUtility.GetFileExtension(downloadUrl); if (curExt != newExt) { try { Global.Logger.Debug("GoogleDriveApp: GetConvertedUri from " + newExt + " to " + curExt + " - " + downloadUrl); var key = DocumentServiceConnector.GenerateRevisionId(downloadUrl); DocumentServiceConnector.GetConvertedUri(downloadUrl, newExt, curExt, key, false, out downloadUrl); } catch (Exception e) { Global.Logger.Error("GoogleDriveApp: Error convert", e); } } var downloadRequest = WebRequest.Create(downloadUrl); using (var downloadResponse = downloadRequest.GetResponse()) using (var downloadStream = new ResponseStream(downloadResponse)) { var request = (HttpWebRequest)WebRequest.Create(GoogleUrlUpload + "/{fileId}?uploadType=media".Replace("{fileId}", fileId)); request.Method = "PUT"; request.Headers.Add("Authorization", "Bearer " + token.AccessToken); request.ContentType = downloadResponse.ContentType; request.ContentLength = downloadResponse.ContentLength; const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; while ((readed = downloadStream.Read(buffer, 0, bufferSize)) > 0) { request.GetRequestStream().Write(buffer, 0, readed); } try { using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { var result = stream != null ? new StreamReader(stream).ReadToEnd() : null; Global.Logger.Debug("GoogleDriveApp: save file stream response - " + result); } } catch (WebException e) { Global.Logger.Error("GoogleDriveApp: Error save file stream", e); request.Abort(); var httpResponse = (HttpWebResponse)e.Response; if (httpResponse.StatusCode == HttpStatusCode.Forbidden) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException, e); } throw; } } }
public override int Read(byte[] buffer, int offset, int count) { return(ResponseStream.Read(buffer, offset, count)); }