成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【Python爬蟲】一招搞定發送中文HTTP請求頭

開發 后端
有時需要將HTTP請求頭的值設為中文,但如果直接設成中文,會拋出異常,例如,下面的代碼為Chinese請求頭設置了中文。

[[385644]]

 有時需要將HTTP請求頭的值設為中文,但如果直接設成中文,會拋出異常,例如,下面的代碼為Chinese請求頭設置了中文。

  1. from urllib import request 
  2. url = 'http://httpbin.org/post' 
  3. headers = { 
  4.     'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
  5.     'Host':'httpbin.org'
  6.     'Chinese':'李寧'
  7. req = request.Request(url = url,headers=headers,method="POST"
  8. request.urlopen(req) 

執行這段代碼,會拋出如下的異常。

  1. UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256) 

這個異常表明HTTP請求頭只能是英文字符和符號,不能是雙字節的文字,如中文。為了解決這個問題,在設置HTTP請求頭時需要將中文編碼,然后發送到服務端后,在服務端用同樣的規則解碼??梢圆捎枚喾N編碼方式,例如url編碼,base64編碼,url編碼就是在瀏覽器地址欄中如果輸入中文,會將其轉換為%xx的形式。如輸入“中國”,會變成E4%B8%AD%E5%9B%BD。

對字符串url編碼,需要使用urllib.parse模塊的urlencode函數,解碼要使用unquote函數,代碼如下:

  1. from urllib.parse import unquote,urlencode 
  2. # 對中文進行編碼 
  3. value = urlencode({'name':'李寧'}) 
  4. print(value) 
  5. # 對中文進行解碼 
  6. print(unquote(value)) 

執行這段代碼,會輸出如下結果:

  1. name=%E6%9D%8E%E5%AE%81 
  2. name=李寧 

使用urlencode函數進行編碼時,需要指定字典類型,不能直接對字符串進行編碼。因為urlencode函數只能對url參數進行編碼。

base64編碼需要使用base64模塊中的b64encode函數,解碼使用b64decode函數,代碼如下:

  1. import base64 
  2. # 對中文進行編碼 
  3. base64Value = base64.b64encode(bytes('Python從菜鳥到高手',encoding='utf-8')) 
  4. print(str(base64Value,'utf-8')) 
  5. # 對中文進行解碼,并按utf-8編碼格式將解碼后的結果轉換為字符串 
  6. print(str(base64.b64decode(base64Value),'utf-8')) 

b64encode函數編碼后返回的是bytes類型,需要使用str函數將其轉換為字符串類型。b64decode函數解碼時需要指定bytes類型的值,b64decode函數的返回值也是bytes類型,所以也需要str函數將該函數的返回值轉換為字符串。

下面的例子演示了設置中文HTTP請求頭,并對其解碼的完整過程。

  1. from urllib import request 
  2. from urllib.parse import unquote,urlencode 
  3. import base64 
  4. url = 'http://httpbin.org/post' 
  5. headers = { 
  6.     'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
  7.     'Host':'httpbin.org'
  8.     'Chinese1':urlencode({'name':'李寧'}),  # 設置中文HTTP請求頭,用url編碼格式 
  9.     # 設置中文HTTP請求頭,用base64編碼格式 
  10.     'MyChinese':base64.b64encode(bytes('這是中文HTTP請求頭',encoding='utf-8')), 
  11.     'who':'Python Scrapy' 
  12. dict = { 
  13.     'name':'Bill'
  14.     'age':30 
  15. data = bytes(urlencode(dict),encoding='utf-8'
  16. req = request.Request(url = url,data=data,headers=headers,method="POST"
  17. # 通過add_header方法添加中文HTTP請求頭,url編碼格式 
  18. req.add_header('Chinese2',urlencode({"國籍":"中國"})) 
  19. response=request.urlopen(req) 
  20. # 獲取服務端的響應信息 
  21. value = response.read().decode('utf-8'
  22. print(value) 
  23. import json 
  24. # 將返回值轉換為json對象 
  25. responseObj = json.loads(value) 
  26. # 解碼url編碼格式的HTTP請求頭 
  27. print(unquote(responseObj['headers']['Chinese1'])) 
  28. # 解碼url編碼格式的HTTP請求頭 
  29. print(unquote(responseObj['headers']['Chinese2'])) 
  30. # 解碼base64編碼格式的HTTP請求頭 
  31. print(str(base64.b64decode(responseObj['headers']['Mychinese']),'utf-8')) 

運行結果如圖1所示。

圖1 設置中文HTTP請求頭

本文轉載自微信公眾號「極客起源」,可以通過以下二維碼關注。轉載本文請聯系極客起源公眾號。

 

責任編輯:武曉燕 來源: 極客起源
相關推薦

2022-09-06 11:53:00

開發計算

2010-03-16 08:59:45

Windows 7純凈版安裝

2015-08-03 14:02:37

Windows 10升級

2020-12-31 13:17:57

手機電腦多屏協同

2020-10-20 08:01:30

MySQL密碼Windows

2023-12-18 08:24:09

LinuxPythonWord

2022-01-25 13:00:52

前端設計優化

2021-12-13 06:56:46

TCP孤兒連接

2021-08-21 23:33:16

iOS蘋果系統

2025-04-18 09:49:48

2019-01-23 10:11:43

Python爬蟲IP

2013-07-30 11:24:33

SAP“簡化IT 一招

2018-08-14 05:21:43

路由器網絡運維網絡

2021-01-25 05:41:25

Flash Fliqlo軟件

2021-11-22 11:30:37

JavaScript代碼瀏覽器

2021-08-02 05:16:36

IE技巧操作系統

2024-05-31 14:04:18

2017-02-28 20:03:49

WIFI無線網卡

2022-12-26 09:16:56

請求量代碼QPS

2022-06-21 09:27:01

PythonFlaskREST API
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情毛片 | 国产一区二区三区在线看 | 午夜视频在线观看网址 | 国产午夜亚洲精品不卡 | 日韩中文一区二区三区 | 国产精品片 | 国产精品一区二区av | 欧美久久精品一级黑人c片 91免费在线视频 | 国产乱码精品1区2区3区 | 久久成人免费 | 最新免费视频 | 亚洲人成免费 | 一区二区三区四区五区在线视频 | 成人国产在线视频 | 国产精品美女久久久久aⅴ国产馆 | 日韩精品一区在线观看 | 成人国产一区二区三区精品麻豆 | 爽爽免费视频 | 亚洲大片一区 | 福利国产 | 久久久久久国产精品免费免费 | 久久99精品久久久久蜜桃tv | 日本三级网址 | 成人超碰 | 亚洲人成人一区二区在线观看 | 欧美精品久久久久 | 国产精品久久久久久 | 精品综合久久久 | 激情亚洲 | 精产国产伦理一二三区 | 黄色大片视频 | 亚洲免费视频在线观看 | 人碰人操 | 影音先锋成人资源 | 福利视频网 | 精品久久国产视频 | 日本国产高清 | 欧美一级精品片在线看 | 九九热九九 | 嫩草一区二区三区 | 围产精品久久久久久久 |