其中request的header中,设置Accept-Encoding为gzip,deflate:

req = (HttpWebRequest)WebRequest.Create(gSkydriveUrl);

req.Headers.Add("Accept-Encoding", "gzip,deflate");

结果始终返回是乱码:

其中,此处之所以加此header,是因为看到网页分析工具中所得到的浏览器浏览该网页,对应的http的header的内容中,就是这样设置的。

所以,代码中,也是模拟浏览器去访问网页,就设置了对应的Accept-Encoding为gzip,deflate了。

【解决过程】

1.刚开始以为是编码的问题,所以去尝试了不同的编码:

req.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";

req.Headers["Accept-Charset"] = "utf-8";

结果始终无法解决问题。

2.后来无意间,把Accept-Encoding取消了,没有设置为gzip,deflate:

//req.Headers.Add("Accept-Encoding", "gzip,deflate");

结果,获得的网页,就正常了。

3.后来网上找到了具体的解释,那就是,

普通浏览器访问网页,之所以添加:

"Accept-Encoding" = "gzip,deflate"

那是因为,浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。

而此代码中,如果也添加此头信息,结果就是,返回的压缩后的数据,没有解码,而将压缩后的数据当做普通的html文本来处理,当前显示出来的内容,是乱码了。

【后记 2012-02-14】

后来调试过程中,突然发现,原来对于HttpWebRequest的参数设置中,还有一个选项是AutomaticDecompression,对于新创建的HttpWebRequest:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

其默认值是None,然后去试了试,该设置为Gzip,然后同时Accept-Encoding为对应的gzip:

req.Headers["Accept-Encoding"] = "gzip,deflate";
req.AutomaticDecompression = DecompressionMethods.GZip;

结果证明,这样也是可以获得对应的格式正确的数据,而不是乱码的。

这就意味着,如果你获取网页内容太大的话,那么还是可以用这个办法的,这样就可以让HttpWebRequest自动帮你实现对应的解压缩了,可以减少数据数据传输量,节省时间,提高效率。

需要注意的是,我这里的实测结果,如果是请求的网页返回的内容不多的话,比如只有几K,那么用了此自动解压缩的设置,也没啥效率的提高,因为毕竟自动解压,也是要花时间的。所以,就是个权衡问题了。自己以实测结果为准,觉得是否采用自动解压。

想要获得正确网页内容,而非乱码的话,就有两种方式了:

1.不要设置Accept-Encoding的Header

//req.Headers.Add("Accept-Encoding", "gzip,deflate");

2.设置Accept-Encoding的Header,同时设置对应的自动解压缩的模式

req.Headers["Accept-Encoding"] = "gzip,deflate";
req.AutomaticDecompression = DecompressionMethods.GZip;

具体采用哪种方法,自己根据需要选择。

用C#写代码去获取网页内容。其中request的header中,设置Accept-Encoding为gzip,deflate:req = (HttpWebRequest)WebRequest.Create(gSkydriveUrl);req.Headers.Add("Accept-Encoding", "gzip,deflate");结果始终返回是乱码: fn main () { let mut input = io :: stdin (); let mut decoder = Decoder :: new ( & mut input). unwrap (); io :: copy ( & mut decoder, & mut io :: stdout ()). unwrap URL url = new URL(path); // 打开和url之间的连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // PrintWriter out = null; // 请求方式 conn.setRequestMethod("POST"); conn.setConnectTi 安装和运行说明: 下载或克隆存储库,然后按照以下步骤 设置 和运行HTTP服务器: 确保已安装Node.js(最低必需的节点版本是v11.7.0要找到您的节点版本,请在终端中运行node -v ) 在包含package.json文件的文件夹中打开一个终端,然后运行命令node . 或npm start 打开浏览器,然后转到或 要停止服务器,请按^ C ( CTRL + C ) 您不需要安装任何依赖关系-所有库都本机安装在Node.js中。 此HTTP服务器示例支持编码 , 和 。 它使用文件流来进一步增加页面加载时间(不需要将文件完全加载到RAM中然后发送,而是直接通过管道传输到客户端)。 其中包含一个名为
python—get/post请求下载指定URL 返回 网页 内容,出现 gzip 乱码 处理。 设置 Accept - Encoding gzip , def late 返回 网页 乱码 # --*-- coding:utf-8 --*-- #coding:utf-8 import string import urllib import urllib2 import ssl def getpicyan
Stream stm = new System.IO.Compression. GZip Stream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
今天在练习写爬虫程序时出现个异常 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 解决办法就是在调用decode()方法时,传入参数"utf-8"问题就解决了 decode("utf-8") 还有一种解决办法就是http改为https
UnicodeDecodeError: utf-8 codec can t decode byte 0x8b in position 1: invalid start byte
string url = "http://quote.eastmoney.com/stocklist.html"; using (var client = new HttpClient())
思路,根据请求 返回 的响应头的Content-Type类型中的charset编码类型去编码抓取的内容,达到解决 乱码 的目的 public static string GetHtml(string url)             string htmlCode;             HttpWebRequest webRequest = (System.Net.Http
本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工具,可以先参考[Fiddler教程] HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如 gzip 来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示 网页 的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。 HTTP内容编码和HTTP压缩的区别
qiguifansi@foxmail.com PUT /api/agent/plugin/ HTTP/1.1 Host: 192.168.169.192:8000 Content-Length: 41844 Accept : application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmFtZSI6ImFkbWluIiwiY3VycmVu dEF 1dGhvcml0eSI6ImFkbWluIiwiaWF0IjoxNjczMzQ3ODkxLCJleHAiOjE2NzMzNTM4OTF9.IvJkzaiJCRe9LZRVxLZLxWmRUZnlZ-Up0DKo1CRGzqo User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3TkWtQ08MxDhgnXB Origin: http://192.168.169.192:8000 Referer: http://192.168.169.192:8000/confManager/pluginmanagement Accept - Encoding : gzip , def late Accept -Language: zh-CN,zh;q=0.9 Connection: close 使用python语言,利用该接口每次上传一个tgz文件直至当前文件夹中所有文件上传成功
这是一个 HTTP PUT 请求,请求地址为 "http://192.168.169.192:8000/api/agent/plugin/"。该请求包含一些头部信息,其中包括: - Host: "192.168.169.192:8000" - Content-Length: 41844 - Accept : "application/json" - Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmFtZSI6ImFkbWluIiwiY3VycmVu dEF 1dGhvcml0eSI6ImFkbWluIiwiaWF0IjoxNjczMzQ3ODkxLCJleHAiOjE2NzMzNTM4OTF9.IvJkzaiJCRe9LZRVxLZLxWmRUZnlZ-Up0DKo1CRGzqo" - User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36" - Content-Type: "multipart/form-data; boundary=----WebKitFormBoundary3TkWtQ08MxDhgnXB" - Origin: "http://192.168.169.192:8000" - Referer: "http://192.168.169.192:8000/confManager/pluginmanagement" - Accept - Encoding : " gzip , def late " - Accept -Language: "zh-CN,zh;q=0.9" - Connection: "close" 在请求正文中,上传的文件的格式为tgz文件。并且你希望使用Python语言通过这个接口,上传当前文件夹中所有文件,直到所有文件上传成功。