6

以下 http post 请求使用 multipart/form-data 内容类型发送数据。

-----------------------------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# 发送相同的请求,但我真的不知道在哪里可以获得这些数字。

4

3 回答 3

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());
        }
    }
}
于 2010-07-18T09:33:04.480 回答
0

它是一个半随机字符串,用于区分不同的字段。在内容类型标头中,这是作为boundary.

查看创建多部分形式边界的有效字符

于 2010-07-18T09:33:56.883 回答
0

如果您想删除---27311326571405边界值作为响应,请使用以下代码

var multiplarty = require('multiparty')
var util = require('util')
if ( req.method === 'POST') {
  var form = new multiplarty.Form();
  form.parse(req, function(err, fields, files) {
    res.writeHead(200, {'content-type': 'text/plain'});
    res.write('received upload:\n\n');
    res.end(util.inspect({fields: fields}));
  });

  return;
}
于 2019-03-12T05:03:43.443 回答