2010-07-18 60 views
6

遵循http post请求使用多部分/表单数据内容类型发送数据。发送多部分/表单数据内容类型请求

-----------------------------27311326571405\r\nContent-Disposition: form-data; name="list"\r\n\r\n8274184\r\n-----------------------------27311326571405\r\nContent-Disposition: form-data; name="list"\r\n\r\n8274174\r\n-----------------------------27311326571405\r\nContent-Disposition: form-data; name="list"\r\n\r\n8274178\r\n-----------------------------27311326571405\r\nContent-Disposition: form-data; name="antirobot"\r\n\r\n2341234\r\n-----------------------------27311326571405\r\nContent-Disposition: form-data; name="votehidden"\r\n\r\n1\r\n-----------------------------27311326571405--\r\n 

列表是输入名称。 8274184,8274174,8274178等都是输入值。但是什么是27311326571405,27311326571405等等?我想用c#发送相同的请求,但我真的不知道我能在哪里得到这个数字。

回答

13

---27311326571405被称为边界,它是一个随机字符串,不应该出现在您要发送的数据中,并用作值之间的分隔符。

这里的发送这样的请求到一个给定的地址的例子:

class Program 
{ 
    static void Main() 
    { 
     var data = new List<KeyValuePair<string, string>>(new[] 
     { 
      new KeyValuePair<string, string>("list", "8274184"), 
      new KeyValuePair<string, string>("list", "8274174"), 
      new KeyValuePair<string, string>("list", "8274178"), 
      new KeyValuePair<string, string>("antirobot", "2341234"), 
      new KeyValuePair<string, string>("votehidden", "1"), 
     }); 

     string boundary = "----MyAppBoundary" + DateTime.Now.Ticks.ToString("x"); 

     var request = (HttpWebRequest)WebRequest.Create("http://example.com"); 
     request.ContentType = "multipart/form-data; boundary=" + boundary; 
     request.Method = "POST"; 

     using (var requestStream = request.GetRequestStream()) 
     using (var writer = new StreamWriter(requestStream)) 
     { 
      foreach (var item in data) 
      { 
       writer.WriteLine("--" + boundary); 
       writer.WriteLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", item.Key)); 
       writer.WriteLine(); 
       writer.WriteLine(item.Value); 
      } 
      writer.WriteLine(boundary + "--"); 
     } 

     using (var response = request.GetResponse()) 
     using (var responseStream = response.GetResponseStream()) 
     using (var reader = new StreamReader(responseStream)) 
     { 
      Console.WriteLine(reader.ReadToEnd()); 
     } 
    } 
} 
+0

很好的答案,确实如此 – 2014-10-28 14:30:05

相关问题