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

2024-02-18

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

参数: 文件名, 用户身份, 密码, 类型


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

namespace WebserverInteractionClassLibrary
{
    public class RequestManager
    {
        public string LastResponse { protected set; get; }

        CookieContainer cookies = new CookieContainer();

        internal string GetCookieValue(Uri SiteUri,string name)
        {
            Cookie cookie = cookies.GetCookies(SiteUri)[name];
            return (cookie == null) ? null : cookie.Value;
        }

        public string GetResponseContent(HttpWebResponse response)
        {
            if (response == null)
            {
                throw new ArgumentNullException("response");
            }
            Stream dataStream = null;
            StreamReader reader = null;
            string responseFromServer = null;

            try
            {
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                reader = new StreamReader(dataStream);
                // Read the content.
                responseFromServer = reader.ReadToEnd();
                // Cleanup the streams and the response.
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {                
                if (reader != null)
                {
                    reader.Close();
                }
                if (dataStream != null)
                {
                    dataStream.Close();
                }
                response.Close();
            }
            LastResponse = responseFromServer;
            return responseFromServer;
        }

        public HttpWebResponse SendPOSTRequest(string uri, string content, string login, string password, bool allowAutoRedirect)
        {
            HttpWebRequest request = GeneratePOSTRequest(uri, content, login, password, allowAutoRedirect);
            return GetResponse(request);
        }

        public HttpWebResponse SendGETRequest(string uri, string login, string password, bool allowAutoRedirect)
        {
            HttpWebRequest request = GenerateGETRequest(uri, login, password, allowAutoRedirect);
            return GetResponse(request);
        }

        public HttpWebResponse SendRequest(string uri, string content, string method, string login, string password, bool allowAutoRedirect)
        {
            HttpWebRequest request = GenerateRequest(uri, content, method, login, password, allowAutoRedirect);
            return GetResponse(request);
        }

        public HttpWebRequest GenerateGETRequest(string uri, string login, string password, bool allowAutoRedirect)
        {
            return GenerateRequest(uri, null, "GET", null, null, allowAutoRedirect);
        }

        public HttpWebRequest GeneratePOSTRequest(string uri, string content, string login, string password, bool allowAutoRedirect)
        {
            return GenerateRequest(uri, content, "POST", null, null, allowAutoRedirect);
        }

        internal HttpWebRequest GenerateRequest(string uri, string content, string method, string login, string password, bool allowAutoRedirect)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }
            // Create a request using a URL that can receive a post. 
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
            // Set the Method property of the request to POST.
            request.Method = method;
            // Set cookie container to maintain cookies
            request.CookieContainer = cookies;
            request.AllowAutoRedirect = allowAutoRedirect;
            // If login is empty use defaul credentials
            if (string.IsNullOrEmpty(login))
            {
                request.Credentials = CredentialCache.DefaultNetworkCredentials;
            }
            else
            {
                request.Credentials = new NetworkCredential(login, password);
            }
            if (method == "POST")
            {
                // Convert POST data to a byte array.
                byte[] byteArray = Encoding.UTF8.GetBytes(content);
                // Set the ContentType property of the WebRequest.
                request.ContentType = "application/x-www-form-urlencoded";
                // Set the ContentLength property of the WebRequest.
                request.ContentLength = byteArray.Length;
                // Get the request stream.
                Stream dataStream = request.GetRequestStream();
                // Write the data to the request stream.
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.
                dataStream.Close();
            }
            return request;
        }

        internal HttpWebResponse GetResponse(HttpWebRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            HttpWebResponse response = null;
            try
            {
                response = (HttpWebResponse)request.GetResponse();                
                cookies.Add(response.Cookies);                
                // Print the properties of each cookie.
                Console.WriteLine("\nCookies: ");
                foreach (Cookie cook in cookies.GetCookies(request.RequestUri))
                {
                    Console.WriteLine("Domain: {0}, String: {1}", cook.Domain, cook.ToString());
                }
            }
            catch (WebException ex)
            {
                Console.WriteLine("Web exception occurred. Status code: {0}", ex.Status);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return response;
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 控制台应用程序创建 HTTP POST 请求并接收响应 的相关文章

  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • Go - formFile 用于多个文件

    formFile 函数工作完美 但是在文档中 http golang org pkg net http Request FormFile据说 FormFile 返回所提供的表单密钥的第一个文件 有没有办法获取 html 表单的多个文件 输入
  • Haskell 中惰性和 I/O 如何协同工作?

    我试图更深入地了解 Haskell 中的惰性 我今天想象了以下片段 data Image Image name String pixels String image String gt IO Image image path Image p
  • 使用卷时无法在主机上使用 mysql 套接字

    我来自这里 如何在主机网络上运行 docker compose https stackoverflow com questions 56203642 how to run docker compose with host network 我
  • 自定义 Laravel 关系?

    假设情况 假设我们有 3 个模型 User Role Permission 我们还说一下User与 具有多对多关系Role and Role与 具有多对多关系Permission 所以他们的模型可能看起来像这样 我故意让它们简短 class
  • 带分组的格式化选择

    现在有了 Formtastic 我有了简单的选择 f input category as gt select include blank gt false collection gt subcategories 这里我只显示儿童类别 我用作
  • 使用 FFTW 取消定义架构 x86_64 的符号

    Ceeloss MacBook Pro desktop ceelos gcc o prog I usr local include test c Undefined symbols for architecture x86 64 fftw
  • 性能反模式

    我目前正在为一位客户工作石化的由于 性能原因 而更改糟糕的不可测试和不可维护的代码 显然 存在着许多误解 而且不明白原因 只是盲目相信 我遇到的一种反模式是需要标记尽可能多的类内部密封 重新编辑 我看到将所有内容标记为sealed内部 在
  • PHP 函数没有返回值

    由于某种原因 我无法让我的函数返回字符串 password crypt password input password Encrypt Password longer than 8 characters function crypt pas
  • setkeyv 与 data.table 中出现异常错误

    我认为自己非常熟悉data table 但遇到了一个奇怪的错误setkeyv我无法解决的功能 错误非常简单 keycols lt c A B DT lt data table A 1 10 B 91 90 setkeyv DT keycol
  • 是否可以在 HipHop 中使用 PECL 扩展?

    我有一个使用rabbit mq代理的应用程序 我有用php编写的消费者并使用这个扩展http pecl php net package amqp http pecl php net package amqp 我想使用 hiphop 编译这些
  • ios 无法保存plist

    我可以在模拟器中保存 plist 文件 但无法在设备中保存 plist 文件 任何建议 我在用着 NSString dictPath NSBundle mainBundle pathForResource Dictionary ofType
  • 如何为 ASP.NET MVC 站点定义包罗万象的路由?

    我有一个新闻网站 其中的文章按类别标记 我的控制器称为 类别 此 URL http mysite com Category Sport passes Sport采取行动Index在控制器中Category 我想允许以下 URL http m
  • 如何在 JavaScript (React) 项目中使用 Azure Pipeline 变量?

    如何在 React 项目中使用为管道定义的变量 目前 我在 yml 文件中定义了构建变量 如下所示 variables src virtual furnace app dest src build REACT APP VERSION Bui
  • 为所有用户安装 Firefox 扩展 [系统范围安装]

    我编写了一个 Firefox 扩展 它打包为 xpi文件 我想为所有用户安装此扩展 我发现我们可以通过将文件放入Mozilla Extensions文件夹 则该扩展将可供所有用户使用 但问题是安装扩展后 第一次启动 Firefox 时 对于
  • 启动进程“git”返回奇怪的 129 退出代码

    In Bash git status gt dev null echo 0 Powershell 中的相同存储库 gt Start Process git ArgumentList status Wait PassThru ExitCode
  • 存储库模式与简单数据访问层有何不同?

    我对在研究存储库模式期间所读到的内容感到困惑 我想知道人们是否 错误地 使用这个词 当他们只是指数据访问层时 由于在索引中找不到 存储库 设计模式 https rads stackoverflow com amzn click com 02
  • 删除过期的访问令牌

    有没有办法从数据库中删除所有过期的访问令牌 目前我正在使用 Django oauth2 工具包 目前 oauth2 没有提供删除过期访问令牌的机制 您可以从 django shell 运行或创建执行的自定义管理命令 from provide
  • 更改factory_boy中的默认faker区域设置

    如何在 Python Factory boy 中为我的所有工厂设置默认区域设置 在文档中说应该设置它factory Faker override default locale但这对我的骗子没有任何作用 import factory from
  • 如何在 Angular 4 中使用 Material Design 图标?

    我想使用来自的图标https materialdesignicons com https materialdesignicons com 在我的 Angular 4 项目中 网站上的说明仅涵盖如何将其包含在Angular 1 x https
  • 使用 C# 控制台应用程序创建 HTTP POST 请求并接收响应

    我需要将数据发布到 URL https somesite com 以根据我发布的参数下载 responseStrem 中的文件 如何使用 C 控制台应用程序来做到这一点 参数 文件名 用户身份 密码 类型 using System usin