Загрузка картинок на фотохостинг - 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();
}