Загрузка картинок на фотохостинг - C#

Узнай цену своей работы

Формулировка задачи:

Пишу аплодер для uploads.ru. API там есть, но описание какое-то невнятное. Набросал примерно такой код:
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;
        }
    }
}
Получаю ответ от сервера: "bad request". Что не так в формировании запроса?

Решение задачи: «Загрузка картинок на фотохостинг»

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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5