这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现。在很多地方都需要验证用户身份才可以进行下一步操作,这就免不了POST请求来登录,在实际过程中发现有些网站登录是HTTPS形式的,在解决过程中遇到了一些小问题,现在跟大家分享。
通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流。 代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net.Security;
- using System.Security.Cryptography.X509Certificates;
- using System.DirectoryServices.Protocols;
- using System.ServiceModel.Security;
- using System.Net;
- using System.IO;
- using System.IO.Compression;
- using System.Text.RegularExpressions;
-
-
-
-
-
-
- namespace BaiduCang
- {
-
-
-
- public class HttpWebResponseUtility
- {
- private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
-
-
-
-
-
-
-
-
- public static HttpWebResponse CreateGetHttpResponse(string url,int? timeout, string userAgent,CookieCollection cookies)
- {
- if (string.IsNullOrEmpty(url))
- {
- throw new ArgumentNullException("url");
- }
- HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
- request.Method = "GET";
- request.UserAgent = DefaultUserAgent;
- if (!string.IsNullOrEmpty(userAgent))
- {
- request.UserAgent = userAgent;
- }
- if (timeout.HasValue)
- {
- request.Timeout = timeout.Value;
- }
- if (cookies != null)
- {
- request.CookieContainer = new CookieContainer();
- request.CookieContainer.Add(cookies);
- }
- return request.GetResponse() as HttpWebResponse;
- }
-
-
-
-
-
-
-
-
-
-
- public static HttpWebResponse CreatePostHttpResponse(string url,IDictionary<string,string> parameters,int? timeout, string userAgent,Encoding requestEncoding,CookieCollection cookies)
- {
- if (string.IsNullOrEmpty(url))
- {
- throw new ArgumentNullException("url");
- }
- if(requestEncoding==null)
- {
- throw new ArgumentNullException("requestEncoding");
- }
- HttpWebRequest request=null;
-
- if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase))
- {
- ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
- request = WebRequest.Create(url) as HttpWebRequest;
- request.ProtocolVersion=HttpVersion.Version10;
- }
- else
- {
- request = WebRequest.Create(url) as HttpWebRequest;
- }
- request.Method = "POST";
- request.ContentType = "application/x-www-form-urlencoded";
-
- if (!string.IsNullOrEmpty(userAgent))
- {
- request.UserAgent = userAgent;
- }
- else
- {
- request.UserAgent = DefaultUserAgent;
- }
-
- if (timeout.HasValue)
- {
- request.Timeout = timeout.Value;
- }
- if (cookies != null)
- {
- request.CookieContainer = new CookieContainer();
- request.CookieContainer.Add(cookies);
-
|
请发表评论