其中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语言通过这个接口,上传当前文件夹中所有文件,直到所有文件上传成功。