• C# 发送HTTP请求(可加入Cookies)


    C# 发送HTTP请求(可加入Cookies)

     MNTM在2018年11月16日发布

            在C#中,发送一个HTTP请求还是相当容易的,而且与Java的方法特别相似,我们并不需要使用socket来实现这个功能,用C#的HttpWebRequest类就能实现了。最后写出的函数是可以请求一个指定URL的,并且可以带上Cookies。

    0x01 HttpWebRequest类的使用方法

    构造HttpWebRequest对象

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
    

    Url变量为要访问的Url

    设置属性(设置请求头)

    request.Method = "POST"; //GET或POST请求
    request.ContentType = "application/x-www-form-urlencoded"; //Content-Type头
    request.ContentLength = postDataStr.Length; //设置Content-Length头
    

    常用属性

    Method    请求方式
    ContentType    Content-Type头
    ContentLength    Content-Length头,正文的长度
    Accept    Accept头,接受的类型
    KeepAlive     是否保持HTTP连接
    Headers    请求头的集合,可以添加/修改/删除某个请求头
    UserAgent    User-Agent头,用于设置浏览器名
    Proxy    获取或设置代理服务器的信息

    常用函数方法

    获取请求流(一般用于添加表单数据等)

    request.GetRequestStream();


    获取响应对象

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    添加请求头

    request.Headers.Add("xxx", val); //添加请求头xxx,的值为val

    0x02 HttpWebResponse类的使用方法

    常用属性

    Headers    请求头的集合,可以添加/修改/删除某个请求头
    ContentEncoding    响应包的编码格式
    ContentLength    Content-Length头,正文的长度
    Cookies    回传的Cookies集合
    StatusCode    HTTP响应状态码

    常用函数方法

    获取响应流(一般用于获取回传数据包的正文内容)

    response.GetResponseStream();
    

    获取响应头

    response.GetResponseHeader("xxx");
    

    0x03 封装一个HttpRequest类

    代码如下

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.IO;
    using System.Text;
    
    /// <summary>
    ///HttpRequest 的摘要说明
    /// </summary>
    public class HttpRequest{
        public static string Post(string Url, string postDataStr,string cookies){
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            if(cookies!=null)
                request.Headers.Add("Cookie", cookies);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postDataStr.Length;
    
            // 参数
            StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);
            writer.Write(postDataStr);
            writer.Close();
    
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string encoding = response.ContentEncoding;
            if (encoding == null || encoding.Length < 1)
            {
                encoding = "UTF-8"; //默认编码  
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
            string retString = reader.ReadToEnd();
            return retString;
        }
    
        public static string Get(string Url,string cookies){
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "GET";
            if(cookies!=null)
                request.Headers.Add("Cookie", cookies);
            request.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string encoding = response.ContentEncoding;
            if (encoding == null || encoding.Length < 1)
            {
                encoding = "UTF-8"; //默认编码  
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
            string retString = reader.ReadToEnd();
            return retString;
        }
    
        public HttpRequest()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
    }
  • 相关阅读:
    波特率原理【转】
    求助大神!怎样批量删除数据库表中某个字段中同样的一段字符!
    1033. To Fill or Not to Fill (25)
    http协议
    【数据结构与算法】二叉树深度遍历(递归)
    2015届求职经历
    Codeforces Round #245 (Div. 1)——Working out
    泛泰A900 刷4.4专用中文TWRP2.7.1.1版 支持自己主动识别手机版本号(全球首创)
    实现简答LinkedList
    oracle的内存管理(之中的一个)
  • 原文地址:https://www.cnblogs.com/grj001/p/12223235.html
Copyright © 2020-2023  润新知