【问题标题】:Send multipart/form-data content type request发送 multipart/form-data 内容类型请求
【发布时间】:2010-07-18 09:21:03
【问题描述】:

follow 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

List 是一个输入名称。 8274184、8274174、8274178 等是输入值。但什么是 27311326571405、27311326571405...等?我想使用 c# 发送相同的请求,但我真的不知道在哪里可以获得这些数字。

【问题讨论】:

    标签: c# http post multipartform-data


    【解决方案1】:

    ---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());
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      它是一个半随机字符串,用于区分不同的字段。在 content-type 标头中,这是作为 boundary 给出的。

      what-are-valid-characters-for-creating-a-multipart-form-boundary

      【讨论】:

        【解决方案3】:

        如果您想在响应中删除---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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-05
          • 1970-01-01
          • 1970-01-01
          • 2013-08-08
          • 2014-10-31
          • 1970-01-01
          相关资源
          最近更新 更多