Implements multipart/form-data POST in C# (rfc2388) - Proxy-Base Community - Анонимность и безопасность в интернете.
Бесплатные прокси. Количество:
Прокси для пользователей форума (API). Количество:
Купить доступ к прокси-листам (API). Количество:
 



Информация по хайдам / репутации

(РЕКОМЕНДУЮ) №1 >>>DDos Атака<<|>>DDoS Service<<< ДДОС СЕРВИС<<|>>Заказать DDOS
Все инфопродукты и приватная информация бесплатно
Старый 17.07.2015, 20:07   #1 (permalink)
VPN
 
Аватар для kill4you
 
Регистрация: 12.08.2009
Адрес: proxy-base.org
Сообщений: 318
Member ID: 2045
ICQ 316817

Репутация: 1437
Репутация: 1437
Сказал(а) спасибо: 1,407
Поблагодарили 509 раз(а) в 210 сообщениях
Топикстартер (автор темы) Хорошо Implements multipart/form-data POST in C# (rfc2388)

Если вы не против пусть здесь полежит как записка.
Думаю кому-то еще пригодится

Сам класс:
Код:
public static class FormUpload
{
private static readonly Encoding encoding = Encoding.UTF8;
public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary<string, object> postParameters)
{
string formDataBoundary = String.Format("----------{0:N}", Guid.NewGuid());
string contentType = "multipart/form-data; boundary=" + formDataBoundary;

byte[] formData = GetMultipartFormData(postParameters, formDataBoundary);

return PostForm(postUrl, userAgent, contentType, formData);
}
private static HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData)
{
HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;

if (request == null)
{
throw new NullReferenceException("request is not a http request");
}

// Set up the request properties.
request.Method = "POST";
request.ContentType = contentType;
request.UserAgent = userAgent;
request.CookieContainer = new CookieContainer();
request.ContentLength = formData.Length;

// You could add authentication here as well if needed:
// request.PreAuthenticate = true;
// request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuth Requested;
// request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.Encoding.Defaul t.GetBytes("username" + ":" + "password")));

// Send the form data to the request.
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(formData, 0, formData.Length);
requestStream.Close();
}

return request.GetResponse() as HttpWebResponse;
}

private static byte[] GetMultipartFormData(Dictionary<string, object> postParameters, string boundary)
{
Stream formDataStream = new System.IO.MemoryStream();
bool needsCLRF = false;

foreach (var param in postParameters)
{
// Thanks to feedback from commenters, add a CRLF to allow multiple parameters to be added.
// Skip it on the first parameter, add it to subsequent parameters.
if (needsCLRF)
formDataStream.Write(encoding.GetBytes("\r\n"), 0, encoding.GetByteCount("\r\n"));

needsCLRF = true;

if (param.Value is FileParameter)
{
FileParameter fileToUpload = (FileParameter)param.Value;

// Add just the first part of this param, since we will write the file data directly to the Stream
string header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n",
boundary,
param.Key,
fileToUpload.FileName ?? param.Key,
fileToUpload.ContentType ?? "application/octet-stream");

formDataStream.Write(encoding.GetBytes(header), 0, encoding.GetByteCount(header));

// Write the file data directly to the Stream, rather than serializing it to a string.
formDataStream.Write(fileToUpload.File, 0, fileToUpload.File.Length);
}
else
{
string postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}",
boundary,
param.Key,
param.Value);
formDataStream.Write(encoding.GetBytes(postData), 0, encoding.GetByteCount(postData));
}
}

// Add the end of the request. Start with a newline
string footer = "\r\n--" + boundary + "--\r\n";
formDataStream.Write(encoding.GetBytes(footer), 0, encoding.GetByteCount(footer));

// Dump the Stream into a byte[]
formDataStream.Position = 0;
byte[] formData = new byte[formDataStream.Length];
formDataStream.Read(formData, 0, formData.Length);
formDataStream.Close();

return formData;
}

public class FileParameter
{
public byte[] File { get; set; }
public string FileName { get; set; }
public string ContentType { get; set; }
public FileParameter(byte[] file) : this(file, null) { }
public FileParameter(byte[] file, string filename) : this(file, filename, null) { }
public FileParameter(byte[] file, string filename, string contenttype)
{
File = file;
FileName = filename;
ContentType = contenttype;
}
}
}
Юзать так:
Код:
// Read file data
FileStream fs = new FileStream("c:\\people.doc", FileMode.Open, FileAccess.Read);
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);
fs.Close();

// Generate post objects
Dictionary<string, object> postParameters = new Dictionary<string, object>();
postParameters.Add("filename", "People.doc");
postParameters.Add("fileformat", "doc");
postParameters.Add("file", new FormUpload.FileParameter(data, "People.doc", "application/msword"));

// Create request and receive response
string postURL = "http://localhost";
string userAgent = "Someone";
HttpWebResponse webResponse = FormUpload.MultipartFormDataPost(postURL, userAgent, postParameters);

// Process response
StreamReader responseReader = new StreamReader(webResponse.GetResponseStream());
string fullResponse = responseReader.ReadToEnd();
webResponse.Close();
Response.Write(fullResponse);
kill4you вне форума   Ответить с цитированием
Старый 17.07.2015, 21:01   #2 (permalink)
SOCKS4
 
Аватар для ddoserr
 
Регистрация: 19.01.2012
Сообщений: 164
Member ID: 23402

Репутация: 384
Репутация: 384
Сказал(а) спасибо: 361
Поблагодарили 128 раз(а) в 81 сообщениях
По умолчанию Re: Implements multipart/form-data POST in C# (rfc2388)

Наверное лучше сделать так (там сохранено форматирвоание): original topic
Ну и докучи пример на основе xNet: habrahabr
ddoserr вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
EOF data E}|{|/||{ Флейм 1 04.04.2011 00:31
Web Data Extractor v8.0 Full version RefCat E-mail 2 19.03.2011 02:54
генератор post@mail.ru;password sol E-mail 5 05.12.2010 09:26
data файл sanko994 Флейм 2 22.07.2009 13:32




DDoS Protected




Мы в твиттере, Proxy-Base.Org Twitter

Proxy-Base Community - Анонимность и безопасность в интернете.
Наши партнеры: CRC Labs, SEO-Crack.Com, Garsuk.Com, SED Team, Skladchik.com, BSS Family

Powered by vBulletin® | Булка сделана в пекарне®
Copyright © 2000 - , Jelsoft Enterprises Ltd. Перевод: zCarot
Вся информация на сайте выложена исключительно в ознакомительных целях.