使用C#控制台应用程序创建HTTP post请求并接收响应

使用C#控制台应用程序创建HTTP post请求并接收响应,c#,http,console,response,C#,Http,Console,Response,我需要将数据发布到URL(https://somesite.com)根据我发布的参数下载ResponseStream中的文件。 如何使用C#控制台应用程序实现这一点 参数: 文件名, 用户ID, 密码, 键入查看System.Net.WebClient类,它可用于发出请求和处理其响应,以及下载文件: 为此,您只需使用.net中的“HttpWebRequest”和“HttpWebResponse”类即可 下面是我编写的一个示例控制台应用程序,它演示了这是多么简单 using System; us

我需要将数据发布到URL(https://somesite.com)根据我发布的参数下载ResponseStream中的文件。 如何使用C#控制台应用程序实现这一点

参数: 文件名, 用户ID, 密码,
键入

查看
System.Net.WebClient
类,它可用于发出请求和处理其响应,以及下载文件:


为此,您只需使用.net中的“HttpWebRequest”和“HttpWebResponse”类即可

下面是我编写的一个示例控制台应用程序,它演示了这是多么简单

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "www.somewhere.com";       
            string fileName = @"C:\output.file";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Timeout = 5000;

            try
            {
                using (WebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
                    {
                        byte[] bytes = ReadFully(response.GetResponseStream());

                        stream.Write(bytes, 0, bytes.Length);
                    }
                }
            }
            catch (WebException)
            {
                Console.WriteLine("Error Occured");
            }
        }

        public static byte[] ReadFully(Stream input)
        {
            byte[] buffer = new byte[16 * 1024];
            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
                return ms.ToArray();
            }
        }
    }
}
享受吧


希望它对您有所帮助

除了使用System.Net.WebClient之外,我建议您看看System.Net.Http.HttpClient,它是在Net 4.5中引入的,使您的生活更加轻松

微软还建议在本文中使用HttpClient

一个例子如下所示:

var client = new HttpClient();
var content = new MultipartFormDataContent
{
     { new StringContent("myUserId"), "userid"},
     { new StringContent("myFileName"), "filename"},
     { new StringContent("myPassword"), "password"},
     { new StringContent("myType"), "type"}
};

var responseMessage = await client.PostAsync("some url", content);        
var stream = await responseMessage.Content.ReadAsStreamAsync();

谢谢我认为您的代码是用于下载的,但我还需要知道如何将数据发布到远程服务器。我需要向服务器发送请求XML并读取响应。如何发送请求?我是否以某种方式将其关联到URL?例如:Site URL:XML-to-send:看起来GenerateRequest方法忽略了它的allowAutoRedirect参数值,并且总是使用值false来代替?答案很好,但它缺少一个有价值的示例。可能会添加一个代码片段,显示您将如何执行此操作,但使用
HttpClient
?@Prolog刚刚添加了一个示例
HttpWebRequest request =(HttpWebRequest)WebRequest.Create("some url");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)";
request.Accept = "/";
request.UseDefaultCredentials = true;
request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
doc.Save(request.GetRequestStream());
HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
var client = new HttpClient();
var content = new MultipartFormDataContent
{
     { new StringContent("myUserId"), "userid"},
     { new StringContent("myFileName"), "filename"},
     { new StringContent("myPassword"), "password"},
     { new StringContent("myType"), "type"}
};

var responseMessage = await client.PostAsync("some url", content);        
var stream = await responseMessage.Content.ReadAsStreamAsync();