Send file+parameters in post request

后端 未结 2 1652
-上瘾入骨i
-上瘾入骨i 2020-12-05 11:29

I\'m using this code to send parameters to a webpage and getting correct response from it.

System.Net.WebClient oWeb = new System.Net.WebClient();
oWeb.Proxy         


        
相关标签:
2条回答
  • 2020-12-05 12:06

    Use WebClient.QueryString to pass name/value pairs associated with the request.

    NameValueCollection parameters = new NameValueCollection();
    parameters.Add("value1", "123");
    parameters.Add("value2", "xyz");
    oWeb.QueryString = parameters;
    var responseBytes = oWeb.UploadFile("http://website.com/file.php", "path to file");
    string response = Encoding.ASCII.GetString(responseBytes);
    
    0 讨论(0)
  • 2020-12-05 12:19
        public static void HttpUploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc)
        {
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
    
            HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
            wr.ContentType = "multipart/form-data; boundary=" + boundary;
            wr.Method = "POST";
            wr.KeepAlive = true;
            wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
            Stream rs = wr.GetRequestStream();
            string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
            foreach (string key in nvc.Keys)
            {
                rs.Write(boundarybytes, 0, boundarybytes.Length);
                string formitem = string.Format(formdataTemplate, key, nvc[key]);
                byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
                rs.Write(formitembytes, 0, formitembytes.Length);
            }
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
            string header = string.Format(headerTemplate, paramName, file, contentType);
            byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
            rs.Write(headerbytes, 0, headerbytes.Length);
            FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[4096];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                rs.Write(buffer, 0, bytesRead);
            }
            fileStream.Close();
            byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
            rs.Write(trailer, 0, trailer.Length);
            rs.Close();
            WebResponse wresp = null;
            try
            {
                wresp = wr.GetResponse();
                Stream stream2 = wresp.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);
                result = reader2.ReadToEnd();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Error occurred while converting file", "Error!");
                if (wresp != null)
                {
                    wresp.Close();
                    wresp = null;
                }
            }
            finally
            {
                wr = null;
            }
        }
    

    Copied from SO but can't remember it's link. And this is how it will be used

            NameValueCollection nvc = new NameValueCollection();
            nvc.Add("parm1", "value1");
            nvc.Add("parm2", "value2");
            nvc.Add("parm3", "value3");
            HttpUploadFile("http://www.example.com/upload.php",@filepath, "file", "text/html", nvc);
    

    Here @filepath is the path of your file you want to upload: c:\file_to_upload.doc And file is the name of the filed used in php as $_Files['file']

    0 讨论(0)
提交回复
热议问题