HttpWebRequest 使用NetworkCredential 进行域认证下载时不成功 的解决方案

2023-05-16

最近在项目中使用pWebRequest 使用NetworkCredential 进行域认证下载时老不成功,最后Google了解决方案,发现几乎所有讨论的方案都不成功,只好埋头自己解决,最后总算调试通过,特将整个解决过程的代码实现记录下来,节约大家以后解决类似问题的时间。

 

KEY POINT: 主要是需要加入ContentType让Server端能够正确解码。

request.ContentType = "application/x-www-form-urlencoded";

 

具体实现代码如下:

 

void DownloadOneFileByHttp(string remoteurl, string localpath, string localurl)

{

HttpWebRequest 

request = HttpWebRequest .Create(remoteurl) as HttpWebRequest ;   WebRequestMethods . Http .Get; false ; new NetworkCredential ( this .UserName, this .Password, this .Domain); "application/x-www-form-urlencoded" ;   //very important for authentication

request.Method =

request.PreAuthenticate =

request.Credentials =

request.ContentType =

 

MemoryStream memStream = new MemoryStream(1024 * 500);

 

byte [] buffer = new byte [1024];

HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

 

Stream reader = response.GetResponseStream();

 

// Create the subfolder

 

if (!System.IO.File.Exists(localpath))

{

   System.IO.

Directory .CreateDirectory(localpath);

}

 

// Write specified bytes array (content) to a file

FileStream newFile = null;

 

try

{

  newFile =

new FileStream (localurl, FileMode .Create);

 

  while (true)

  {

    int bytesRead = reader.Read(buffer, 0, buffer.Length);

 

    if(bytesRead == 0)

    {

       break;

    }

 

    else

    {

    memStream.Write(buffer, 0, bytesRead);

    }

  }

  

  if(memStream.Length > 0)

  {

    // Converts the downloaded stream to a byte array

     byte [] downloadedData = memStream.ToArray();

    newFile.Write(downloadedData, 0, downloadedData.Length);

  }

 }

 

 catch (Exception ex)

 {

 System.

Console .WriteLine( "Exception in HTTP downloading: {0}" , ex.Message);

  }

 finally

 {

  

  if (newFile != null) newFile.Close();

 

  if (reader != null ) reader.Close();

 

  if (response != null ) response.Close();

 

  }

}

 

最后提示一下大家:对于想了解为何要这样写的朋友可以使用IE登陆并且用httpwatchpro 拦截一下整个报文的内容,然后用.NET代码访问并且下载同样的文件,然后使用winpcap这样的网络嗅探器拦截一下整个报文的内容,对比一下你就很容易得出结论。

 

当然这个解决方案对于熟知HTTP协议并且编写过自定义爬虫的朋友是很容易得出。

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

HttpWebRequest 使用NetworkCredential 进行域认证下载时不成功 的解决方案 的相关文章

随机推荐

  • LINUX基础试题大全(1)

    说明 xff1a 此文章由于题数庞大 xff0c 为方便阅读本人将其分为四篇文章为大家分享 xff01 答案会今后不断进行更新 xff01 LINUX基础试题大全 xff08 1 xff09 填空题题 LINUX基础试题大全 xff08 2
  • C语言 | 深入学习数组

    说明 xff1a 本文主要讨论一维数组 xff0c 适宜程度 xff1a 对C语言初步认识及想深入学习者 1 从编译器角度理解数组 从编译器角度理解来讲 xff0c 数组也是一个变量 xff0c 和普通的变量没有本质的区别 变量的本质指的是
  • C语言 结构体 联合体 | 嵌套使用

    一 简单的实例分析 题目 xff1a 获取0x12345678各个字节 答案 xff1a span class token comment 方法一 span span class token macro property span clas
  • Linux 网络编程笔记3 | 内存 系统调用

    七 内存 1 虚拟内存 物理内存 半导体内存和换页文件 虚拟内存 xff1a 地址空间 xff0c 虚拟的存储区域 xff0c 应用程序所访问的都是虚拟内存 物理内存 xff1a 存储空间 xff0c 实际的存储区域 xff0c 只有系统内
  • 树莓派替代品

    51单片机 转载于 https www cnblogs com wanghuaqiang p 11481958 html
  • C++ 笔记10 | 多态(polymorphic)

    span class token variable eg 实现图形库 xff0c 用于显示各种图形 span span class token variable 图形基类 span span class token punctuation
  • QT 笔记3 | Qt设计师使用 Qt创造器使用

    六 Qt设计师使用 designer 案例1 xff1a 使用设计师重构加法计算器 1 创建工程目录 mkdir Calculator2 2 进入工程目录 xff0c 执行 designer 启动设计师 1 xff09 在新建窗体界面 xf
  • QT 笔记5 |Qt多线程(QThread)

    一 Qt多线程 QThread 1 创建线程方法1 xff1a QObject moveToThread class Myclass public QObject Q OBJECT public slots void func void 耗
  • QT 笔记6 | Qt网络编程

    回顾 xff1a 1 Qt多线程 QThread 1 xff09 创建线程 方法1 xff1a moveToThread 方法2 xff1a 继承QThread xff0c 重写run函数 2 xff09 线程同步 互斥锁 xff1a QM
  • QT 笔记7 | UDP编程

    回顾 xff1a 1 xff09 控件类 QT 43 61 widgets QApplication Qt的gui应用程序 QWidget 控件基类 QLabel 标签 QPushButton 按钮 QDialog 对话框 QMainWin
  • 学习c语言

    今天学习了if语句和 xff45 xff4c xff53 xff45 运用 xff43 语言更加顺手 xff0c 之前一些都能实施 xff0c 真是太开心了 include lt stdio h gt int main 初始化 int pr
  • 求符合给定条件的整数集(做题)

    题目如上 xff1b 首先我们先想思路 xff1a 先来一个输入 xff0c 读入这个数 xff0c 然后我们需要三个变量来储存这三个数 xff1b 然后我们遍历所有的组合 xff0c 这个依靠循环 接下来是代码 xff1a include
  • 水仙花数(做题)

    代码如下 xff1a include lt stdio h gt int main int a scanf 34 d 34 amp a float t t 61 0 1 while a gt 0 t 61 t 10 a 判断几位数 int
  • 一分钟了解动态内存分配

    谈到这 xff0c 必然离不开malloc函数 在上面可以看出此函数需要一个头文件 include lt stdilb h gt 而且返回类型是void 传进去的是空间大小 xff0c 此函数申请的空间是字节为单位的 这其中的就分配了100
  • 动态内存分配深究

    接下来我们将探究以下三个问题 xff1a 1 相邻两次malloc得到的空间是否是连续的呢 xff1f 2 你得到的空间的实际大小是否就是你要求的大小呢 xff1f 3 如果你malloc零长度会得到什么结果呢 xff1f 第一个问题 xf
  • 同一个页面不打开两次

    lt script language 61 34 javascript 34 gt function popwin3 path window open path 34 cart 34 34 height 61 520 width 61 52
  • 超易懂!二分查找 详析

    二分算法的 本质 是 xff1a 假如我们可以找到事物的 某种性质 xff0c 这种性质 可以将区间一分为二 xff0c 一半满足 xff0c 一半不满足 我们就可以二分 另外 xff0c 有 连续性 必可以 二分 二分模板一共有两个 xf
  • 手摸手 Spring Cloud Gateway + JWT 实现登录认证

    你好 xff0c 我是悟空 前言 上篇我已经讲解了 Spring Cloud 的原理和实战 xff0c 这次就要结合 JWT 来实现登录认证的功能了 本文已收录至 深入剖析 Spring Cloud 底层架构原理 xff0c 已更新 18
  • 百行代码实现VLC简易视频播放器【VLC环境配置过程+可执行源码注释完整】

    文章目录 什么是VLC x1f680 VLC 库的集成 VLC环境配置演示 win10系统 43 vs2017 43 win64 x1f34e VLC 库的基本使用 x1f382 视频播放器实现 自定义函数Unicode2Utf8讲解 x1
  • HttpWebRequest 使用NetworkCredential 进行域认证下载时不成功 的解决方案

    最近在项目中使用pWebRequest 使用NetworkCredential 进行域认证下载时老不成功 xff0c 最后Google了解决方案 xff0c 发现几乎所有讨论的方案都不成功 xff0c 只好埋头自己解决 xff0c 最后总算