文章来自http://www.cnblogs.com/deerchao/archive/2007/08/09/849361.html

使用
 HttpClient client = new HttpClient("[登陆页面地址]?username=aaa&password=bbb", null, true); //最后一个参数true,表示保存返回的Cookies,
string html=client.GetString();//发出请求,返回结果字符串;
client.url=searchurl; //searchurl为查询页面,在该url后连上对应的查询条件即可完成查询
string html=client.GetString();

然后可以通过正则表达式,根据指定的字符串模型返回需要的部分

/// <summary>
        /// 在源字符串中查找前置字符串为left,后置字符串为right的内容
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="condition">条件字符串,由前置字符串+<%%>+后置字符串组成</param>
        /// <param name="right">后置字符串</param>
        /// <param name="index">要返回的结果集合中的子项</param>
        /// <returns></returns>
        public static string FindSubString(string source,string condition,int index)
        {
            string regexString = condition.Replace("<%%>", @"([\s\S]*?)");
            Match m = null;
            m = Regex.Match(source, regexString);
            return  m.Groups[index].Value;
          
        }

获取编码转换后的字符串

HttpClient client=new HttpClient(url);
string html=client.GetString();

GetString()函数内部会查找Http Headers, 以及HTML的Meta标签,试图找出获取的内容的编码信息.如果都找不到,它会使用client.DefaultEncoding, 这个属性默认为utf-8, 也可以手动设置.

自动保持Cookie, Referer

HttpClient client=new HttpClient(url1, null, true);
string html1=client.GetString();
client.Url=url2;
string html2=client.GetString();

这里HttpClient的第三个参数,keepContext设置为真时,HttpClient会自动记录每次交互时服务器对Cookies进行的操作,同时会以前一次请求的Url为Referer.在这个例子里,获取html2时,会把url1作为Referer, 同时会向服务器传递在获取html1时服务器设置的Cookies. 当然,你也可以在构造HttpClient时直接提供第一次请求要发出的Cookies与Referer:

HttpClient client=new HttpClient(url, new WebContext(cookies, referer), true);

或者,在使用过程中随时修改这些信息:

client.Context.Cookies=cookies;
client.Context.referer=referer;

模拟HTML表单提交

HttpClient client=new HttpClient(url);
client.PostingData.Add(fieldName1, filedValue1);
client.PostingData.Add(fieldName2, fieldValue2);
string html=client.GetString();

上面的代码相当于提交了一个有两个input的表单. 在PostingData非空,或者附加了要上传的文件时(请看下面的上传和文件), HttpClient会自动把HttpVerb改成POST, 并将相应的信息附加到Request上.

向服务器上传文件

HttpClient client=new HttpClient(url);
client.AttachFile(fileName, fieldName);
client.AttachFile(byteArray, fileName, fieldName);
string html=client.GetString();

这里面的fieldName相当于<input type="file" name="fieldName" />里的fieldName. fileName当然就是你想要上传的文件路径了. 你也可以直接提供一个byte[] 作为文件内容, 但即使如此,你也必须提供一个文件名,以满足HTTP规范的要求.

不同的返回形式

字符串: string html = client.GetString();
流: Stream stream = client.GetStream();
字节数组: byte[] data = client.GetBytes();
保存到文件:  client.SaveAsFile(fileName);
或者,你也可以直接操作HttpWebResponse: HttpWebResponse res = client.GetResponse();

每调用一次上述任何一个方法,都会导致发出一个HTTP Request, 也就是说,你不能同时得到某个Response的两种返回形式.
另外,调用后它们任意一个之后,你可以通过client.ResponseHeaders来获取服务器返回的HTTP头.
下载资源的指定部分(用于断点续传,多线程下载)

HttpClient client=new HttpClient(url);
//发出HEAD请求,获取资源长度
int length=client.HeadContentLength();

//只获取后一半内容
client.StartPoint=length/2;
byte[] data=client.GetBytes();

HeadContentLength()只会发出HTTP HEAD请求.根据HTTP协议, HEAD与GET的作用等同, 但是,只返回HTTP头,而不返回资源主体内容. 也就是说,用这个方法,你没法获取一个需要通过POST才能得到的资源的长度,如果你确实有这样的需求,建议你可以通过GetResponse(),然后从ResponseHeader里获取Content-Length.

转载于:https://www.cnblogs.com/rexying/archive/2008/01/04/1026205.html

获取需要登陆才能被访问的页面,HttpClient(扩展HttpWebRequest)来实现相关推荐

  1. javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面

    想用Filter实现一个登陆验证的功能,实现登陆成功后才能访问主页面,否则直接输入主页面的地址会自动跳转到登陆界面 原理很简单,每次登陆成功后,创建一个session域对象,将登陆成功的用户名保存在s ...

  2. 界面登录、登陆后才能访问另外页面

    1.//登录页面 <!DOCKTYPE html> <html> <head runat="server">     <meta http ...

  3. Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面

    Tomcat使用过滤器实现页面的限制访问 需要解决的问题   最近在学tomcat,当接触到过滤器时,想着怎样才能对所有的页面请求都进行一次拦截筛选,实现只放行登录页面,如果访问其他页面,则必须登录, ...

  4. postman测试登录后的接口_中文版Postman测试需要登陆才能访问的接口(基于Cookie)...

    ApiPost堪称增强版的中文postman,是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工 ...

  5. html输入密码访问指定页面,三种方法使HTML单页面输入密码才能访问

    方法一 function password() { var testV = 1; var pass1 = prompt('请输入密码',''); while (testV < 3) { if ( ...

  6. 如果用户没有登陆直接通过url访问其它页面的解决办法

    项目的登陆功能是模块差不多都做完时候才加上的,由于项目都是用框架做的,现在想增加登陆功能,如果用户直接通过url访问其它页面时候则返回到登陆页面. 这次的解决方案是不依赖任何框架和jar包.就用最基本 ...

  7. asp.net中, 如何在后台获取访问这个页面的用户的名字?

    asp.net中, 如何在后台获取访问这个页面的用户的名字? 在集成安全认证下, 可以利用以下代码获取: System.Security.Principal.WindowsIdentity wi =  ...

  8. 百度网盘登陆验证提示:无法访问此页面,或者二维码显示失败,弹窗显示:无法访问此页面,确保web地址。。。。

    百度网盘登陆验证提示:无法访问此页面,或者二维码显示失败,弹窗显示:无法访问此页面,确保web地址.... 遇到百度网盘登陆时显示下面的情况: 原因:是自己电脑的IE浏览器设置出了问题,没有显示出来应 ...

  9. 1.只有本地管理员才能访问本页面2.notes Happy Why am lfeeling so happy today? Well ljust got to spend threedays with

    只有本地管理员才能访问本页面 F12 看看源码 没啥东西 御剑看看后台 也没看出来有啥 看了下 需要管理员权限 在headers里面设置 添加一行 X-Forwarded-For127.0.0.1 f ...

最新文章

  1. Java记录 -62- java.util.Collections
  2. 【今日互联网大事儿】传百度要投资Uber呢~
  3. Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
  4. Fiori 里周期性检查window size大小的变化
  5. javadoc定义异常_Doclava:来自Google的自定义Javadoc Doclet
  6. oracle 11g的启动和关闭
  7. Mysql你应该要懂索引知识
  8. 运维管理成中小企业“心头大患” 飞塔“安接入”一步解决
  9. [转载]MySQL锁机制
  10. chrome浏览器性能分析
  11. n次独立重复试验暨伯努利试验
  12. pathon基础练习
  13. Dynamics 365 IFD设置反向代理后无法跳转登录页的解决方法
  14. MySQL常用命令与函数
  15. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1060:均值
  16. FPGA数字信号处理(九)Vivado FFT IP核实现
  17. 生成式对抗网络(GAN)-(Generative Adversarial Networks)算法总结(从原始GAN到....目前)
  18. 测绘南方Cass,CAD删除居民地(JMD)房屋内高程点 (GCD)
  19. leetcode|经典力扣第一题
  20. WPF实现图片手风琴动态切换效果

热门文章

  1. 阶乘的计算java_java中四种阶乘的计算
  2. auto.js停止所有线程_十年架构师带你快速上手多线程
  3. 电脑工具栏怎么调整到下面_抖音怎么加字幕?如何制作短视频?
  4. 试题 历届试题 带分数(全排列)
  5. 牛客竞赛36签到题A(思维)
  6. 重磅|阿里云发布“一站式敏捷数据仓库解决方案” 实现库仓一体数据分析能力(内含干货PPT下载)
  7. 2021中国互联网大会正式发布阿里云《云采用框架白皮书》
  8. ACR EE 全链路加速升级
  9. Knative 多容器支持介绍
  10. 阿里新晋CNCF TOC委员张磊:“云原生”为什么对云计算生态充满吸引力?