c# HttpWebResponse添加 form-data body
您可以使用HttpWebRequest来发送带有form-data类型的请求体。以下是一个示例代码:
string url = "http://example.com/api/endpoint";
string filePath = "path/to/file.jpg";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
request.ContentType = "multipart/form-data; boundary=" + boundary;
// 添加表单字段
streamWriter.WriteLine("--" + boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"fieldName\"");
streamWriter.WriteLine();
streamWriter.WriteLine("fieldValue");
// 添加文件字段
streamWriter.WriteLine("--" + boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"file\"; filename=\"" + Path.GetFileName(filePath) + "\"");
streamWriter.WriteLine("Content-Type: application/octet-stream");
streamWriter.WriteLine();
streamWriter.Flush();
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
streamWriter.BaseStream.Write(buffer, 0, bytesRead);
}
streamWriter.WriteLine();
}
streamWriter.WriteLine("--" + boundary + "--");
streamWriter.Flush();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string responseContent;
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
responseContent = streamReader.ReadToEnd();
}
Console.WriteLine(responseContent);
在上面的代码中,我们首先创建一个HttpWebRequest对象,并设置请求的URL、请求方法和内容类型。然后,我们使用StreamWriter将表单字段和文件字段写入请求的流中。
对于每个字段,我们首先写入一个分隔符boundary,然后写入字段的Content-Disposition和值。对于文件字段,我们还需要指定文件的文件名和内容类型。
接下来,我们使用FileStream打开文件,并将文件内容写入请求的流中。
最后,我们写入一个结束的分隔符boundary,然后获取服务器的响应,并读取响应内容。
请注意,上述示例中的代码是基于.NET Framework的。如果您正在使用.NET Core或.NET 5+,则可以使用HttpClient类来发送请求,它提供了更简洁和直观的API
原文地址: https://www.cveoy.top/t/topic/hA6c 著作权归作者所有。请勿转载和采集!