程序内部或controller中发起post请求,调用http接口

本文提供了一个使用C#发起HTTP POST请求的代码示例。该示例展示了如何设置请求头、编码请求参数并读取服务器响应。对于需要与HTTP API交互的开发者来说,这是一个实用的参考。

经常会在程序内部调用http方式的接口,直接发起post请求。一下为代码示例:url为请求地址,param为携带的参数

         public static string Post(string url, string param)
         {
             System.Text.Encoding myEncode = System.Text.Encoding.GetEncoding("UTF-8");
             byte[] postBytes = System.Text.Encoding.ASCII.GetBytes(param);


             HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
             req.Method = "POST";
             //req.KeepAlive = false;
             req.ContentType = "application/x-www-form-urlencoded";
             req.ContentLength = postBytes.Length;

             try
             {
                 using (Stream reqStream = req.GetRequestStream())
                 {
                     reqStream.Write(postBytes, 0, postBytes.Length);
                 }

                 using (WebResponse res = req.GetResponse())
                 {
                     using (StreamReader sr = new StreamReader(res.GetResponseStream(), myEncode))
                     {
                         string strResult = sr.ReadToEnd();
                         return strResult;
                     }
                 }

             }
             catch (WebException ex)
             {
                 return "无法连接到服务器\r\n错误信息:" + ex.Message;
             }

         }




                
### 网页请求发起程序链流程 当用户在浏览器中输入网址点击链接时,触发了一系列复杂的操作来完成一次完整的HTTP请求。以下是详细的请求处理链条: #### 1. 用户交互与事件触发 用户的任何动作(如点击按钮、提交表单),都可能导致JavaScript代码执行特定逻辑,进而构建并发出HTTP请求。 #### 2. 构建请求对象 通过XMLHttpRequest、Fetch API其他库创建新的请求实例,并配置URL路径、方法类型(GET/POST等)、头部信息和其他参数[^4]。 #### 3. 设置请求选项 对于较为复杂的场景,可以在此阶段设定额外的请求属性,例如自定义Header字段、携带认证Token、指定Content-Type为`application/json`以便传输JSON格式的数据体等内容[^5]。 #### 4. 发送请求至客户端网络栈 一旦准备就绪,便调用send()方法将封装好的请求交给底层TCP/IP协议栈去建立连接并向目标服务器发送数据包;如果是HTTPS,则还需经历SSL/TLS握手过程以确保通信加密安全。 #### 5. DNS解析与路由查找 为了找到远程主机的确切位置,在正式建立TCP三次握手之前还需要先做DNS查询获取IP地址,并由操作系统内核负责寻找通往该目的地的最佳路径。 #### 6. 建立TCP连接 成功解析出目的IP后,源端口随机选取一个未被占用的本地端口号尝试与服务端建立持久化会话通道——即所谓的“三次握手”,从而保证后续消息传递可靠有序。 #### 7. 应用层协议协商 此时双方已经建立了稳定的双向通讯线路,接下来就是按照既定的应用级语义规则交换具体业务指令了。比如采用HTTP(S)作为高层对话标准的话,就需要遵循其规定的语法结构来进行资源定位、状态码解释等工作。 #### 8. Web容器接收请求 到达Web Server之后,像Nginx这样的反向代理可能会再次转发给后台的实际处理器Tomcat/Jetty等Java Servlet容器。这些容器通常继承自FrameworkServlet类,它们实现了doGet/doPost接口用于区分不同类型的HTTP动词,并最终把所有请求统一转交给processRequest抽象方法作进一步加工处理[^2]。 #### 9. 控制器映射分发 Spring MVC框架内的DispatcherServlet接收到原始HttpServletRequest后,依据预设的URL模式匹配原则挑选合适的HandlerMapping组件,再经由HandlerAdapter适配器调用具体的Controller实现类下的Action方法来真正响应前端提出的各种需求。 #### 10. 返回结果序列化 经过一系列运算得出的结果集往往是以实体Bean的形式存在的,因此需要借助Jackson/Gson之类的工具将其转换成字符串形式返回给客户端展示出来。 ```javascript fetch('/api/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: value, anotherKey: anotherValue }) }) .then(response => response.json()) .catch(error => console.error('Error:', error)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值