Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Building on dnolans example, this is the version I could actually get to work (there were some errors with the boundary, encoding wasn't set) :-)</p> <p>To send the data:</p> <pre><code>HttpWebRequest oRequest = null; oRequest = (HttpWebRequest)HttpWebRequest.Create("http://you.url.here"); oRequest.ContentType = "multipart/form-data; boundary=" + PostData.boundary; oRequest.Method = "POST"; PostData pData = new PostData(); Encoding encoding = Encoding.UTF8; Stream oStream = null; /* ... set the parameters, read files, etc. IE: pData.Params.Add(new PostDataParam("email", "example@example.com", PostDataParamType.Field)); pData.Params.Add(new PostDataParam("fileupload", "filename.txt", "filecontents" PostDataParamType.File)); */ byte[] buffer = encoding.GetBytes(pData.GetPostData()); oRequest.ContentLength = buffer.Length; oStream = oRequest.GetRequestStream(); oStream.Write(buffer, 0, buffer.Length); oStream.Close(); HttpWebResponse oResponse = (HttpWebResponse)oRequest.GetResponse(); </code></pre> <p>The PostData class should look like:</p> <pre><code>public class PostData { // Change this if you need to, not necessary public static string boundary = "AaB03x"; private List&lt;PostDataParam&gt; m_Params; public List&lt;PostDataParam&gt; Params { get { return m_Params; } set { m_Params = value; } } public PostData() { m_Params = new List&lt;PostDataParam&gt;(); } /// &lt;summary&gt; /// Returns the parameters array formatted for multi-part/form data /// &lt;/summary&gt; /// &lt;returns&gt;&lt;/returns&gt; public string GetPostData() { StringBuilder sb = new StringBuilder(); foreach (PostDataParam p in m_Params) { sb.AppendLine("--" + boundary); if (p.Type == PostDataParamType.File) { sb.AppendLine(string.Format("Content-Disposition: file; name=\"{0}\"; filename=\"{1}\"", p.Name, p.FileName)); sb.AppendLine("Content-Type: application/octet-stream"); sb.AppendLine(); sb.AppendLine(p.Value); } else { sb.AppendLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", p.Name)); sb.AppendLine(); sb.AppendLine(p.Value); } } sb.AppendLine("--" + boundary + "--"); return sb.ToString(); } } public enum PostDataParamType { Field, File } public class PostDataParam { public PostDataParam(string name, string value, PostDataParamType type) { Name = name; Value = value; Type = type; } public PostDataParam(string name, string filename, string value, PostDataParamType type) { Name = name; Value = value; FileName = filename; Type = type; } public string Name; public string FileName; public string Value; public PostDataParamType Type; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload