Загрузка картинок на фотохостинг - C#
Формулировка задачи:
Пишу аплодер для uploads.ru. API там есть, но описание какое-то невнятное. Набросал примерно такой код:
Получаю ответ от сервера: "bad request". Что не так в формировании запроса?
using System; using System.IO; using System.Net; using System.Text; namespace Uploader { class Program { static void Main(string[] args) { //string data = "upload=" + Encoding.UTF8.GetString(GetFileByteArray(@"C:\Temp\1.jpg")) + "&format=xml"; string data = "upload=http://www.google.com/images/srpr/nav_logo66.png"; byte[] dataStream = Encoding.UTF8.GetBytes(data); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://uploads.ru/api.php"); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = dataStream.Length; Stream newStream = req.GetRequestStream(); newStream.Write(dataStream, 0, dataStream.Length); newStream.Close(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); using (StreamReader stream = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)) { Console.WriteLine(stream.ReadToEnd()); } Console.ReadKey(true); } private static byte[] GetFileByteArray(string filename) { FileStream oFileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); byte[] FileByteArrayData = new byte[oFileStream.Length]; oFileStream.Read(FileByteArrayData, 0, System.Convert.ToInt32(oFileStream.Length)); oFileStream.Close(); return FileByteArrayData; } } }
Решение задачи: «Загрузка картинок на фотохостинг»
textual
Листинг программы
static void Upload() { StringBuilder sb = new StringBuilder(); sb.AppendLine(""); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"); sb.AppendLine("Content-Disposition: form-data; name=\"Filename\""); sb.AppendLine(""); sb.AppendLine("ico-shortcut.png"); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"); sb.AppendLine("Content-Disposition: form-data; name=\"sID\""); sb.AppendLine(""); sb.AppendLine("vu29t1nnvfd905154dfrbgj517"); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"); sb.AppendLine("Content-Disposition: form-data; name=\"doShort\""); sb.AppendLine(""); sb.AppendLine("false"); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"); sb.AppendLine("Content-Disposition: form-data; name=\"ImageUp\"; filename=\"ico-shortcut.png\""); sb.AppendLine("Content-Type: application/octet-stream"); sb.AppendLine(""); sb.AppendLine("|"); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"); sb.AppendLine("Content-Disposition: form-data; name=\"Upload\""); sb.AppendLine(""); sb.AppendLine("Submit Query"); sb.AppendLine("--ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3--"); string[] data = sb.ToString().Split('|'); byte[] array1 = Encoding.UTF8.GetBytes(data[0]); byte[] array3 = Encoding.UTF8.GetBytes(data[1]); byte[] dataStream = File.ReadAllBytes("ico-shortcut.png"); dataStream = array1.Concat(dataStream.Concat(array3)).ToArray(); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://uploads.ru/upload.php"); req.Method = "POST"; req.ContentLength = dataStream.Length; req.Headers.Add(HttpRequestHeader.Cookie, "Cookie: PHPSESSID=vu29t1nnvfd905154dfrbgj517"); req.Accept = "text/*"; req.ContentType = "multipart/form-data; boundary=ae0cH2ei4Ef1gL6Ij5KM7ei4Ef1GI3"; req.UserAgent = "Shockwave Flash"; req.Host = "uploads.ru"; Stream newStream = req.GetRequestStream(); newStream.Write(dataStream, 0, dataStream.Length); newStream.Close(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); using (StreamReader stream = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)) { Console.WriteLine(stream.ReadToEnd()); } } static void Main(string[] args) { Upload(); Console.ReadLine(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д