private async Task <string> UploadImage(AssetData asset, int count = 0) { try { StreamReader fileStream = new StreamReader(asset.Path); string requestURI = "https://up-api-kage-4story.kakao.com/web/webstory-img/"; string boundary = "----" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest request = WebRequest.CreateHttp(requestURI); request.Method = "POST"; request.ContentType = "multipart/form-data; boundary=" + boundary; CookieContainer containerNow = new CookieContainer(); containerNow.SetCookies(new Uri("https://up-api-kage-4story.kakao.com/"), WebViewWindow.cookieString); request.CookieContainer = containerNow; request.Headers["Accept-Encoding"] = "gzip, deflate, br"; request.Headers["Accept-Language"] = "ko-KR"; request.Headers["Origin"] = "https://story.kakao.com"; request.Headers["DNT"] = "1"; request.Referer = "https://story.kakao.com/"; request.KeepAlive = true; request.UseDefaultCredentials = true; request.Host = "up-api-kage-4story.kakao.com"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"; request.Accept = "*/*"; request.AutomaticDecompression = DecompressionMethods.GZip; Stream writeStream = await request.GetRequestStreamAsync(); WriteMultipartForm(writeStream, boundary, null, System.IO.Path.GetFileName(asset.Path), System.Web.MimeMapping.GetMimeMapping(asset.Path), fileStream.BaseStream); fileStream.Close(); var readStream = await request.GetResponseAsync(); var respReader = readStream.GetResponseStream(); string respResult = await(new StreamReader(respReader, Encoding.UTF8)).ReadToEndAsync(); respReader.Close(); UploadedImageProp result = JsonConvert.DeserializeObject <UploadedImageProp>(respResult); return(result.access_key + "/" + result.info.original.filename + "?width=" + result.info.original.width + "&height=" + result.info.original.height + "&avg=" + result.info.original.avg); } catch (WebException e) { if ((int)(e.Response as HttpWebResponse).StatusCode == 401 && count < 10) { return(await UploadImage(asset, ++count)); } else { return(null); } } }
public async static Task ReplyToFeed(string FeedID, string text, string id, string name, UploadedImageProp img = null) { text = text.Replace("\"", "\\\""); text = text.Replace("\r\n", "\\n"); text = text.Replace("\n", "\\n"); text = text.Replace("\r", "\\n"); string requestURI = "https://story.kakao.com/a/activities/" + FeedID + "/comments"; if (id != null && name != null) { text = text.Insert(0, "{!{{" + "\"id\":\"" + id + "\", \"type\":\"profile\", \"text\":\"" + name + "\"}}!} "); } List <QuoteData> rawContent = GlobalHelper.GetQuoteDataFromString(text, true); string textContent = Uri.EscapeDataString(JsonConvert.SerializeObject(rawContent).Replace("\"id\":null,", "")); string postData; string imageData = ""; string imageData2 = ""; string textNow = GlobalHelper.GetStringFromQuoteData(rawContent, false); if (img != null) { imageData2 = "(Image) "; imageData = "{\"media_path\":\"" + img.access_key + "/" + img.info.original.filename + "?width=" + img.info.original.width + "&height=" + img.info.original.height + "&avg=" + img.info.original.avg + "\",\"type\":\"image\",\"text\":\"(Image) \"},"; textContent = textContent.Insert(3, Uri.EscapeDataString(imageData)); } postData = "text=" + Uri.EscapeDataString(imageData2 + textNow) + "&decorators=" + textContent; postData = postData.Replace("%20", "+"); byte[] byteArray = Encoding.UTF8.GetBytes(postData); HttpWebRequest webRequest = GenerateDefaultProfile(requestURI, "POST"); Stream writeStream = await webRequest.GetRequestStreamAsync(); writeStream.Write(byteArray, 0, byteArray.Length); writeStream.Close(); await GetResponseFromRequest(webRequest); }