urllib和request的區別總結
urllib and urllib2 區別
–博主提示:下面的是python2中的用法,python3需要做出相應修改。
urllib和urllib2模組都做與請求URL相關的操作,但他們提供不同的功能。
urllib2.urlopen accepts an instance of the Request class or a url, (whereas urllib.urlopen only accepts a url 中文意思就是:urllib2.urlopen可以接受一個Request物件或者url,(在接受Request物件時候,並以此可以來設定一個URL的headers),urllib.urlopen只接收一個url
urllib 有urlencode,urllib2沒有,這也是為什麼總是urllib,urllib2常會一起使用的原因
r = Request(url='http://www.mysite.com')
r.add_header('User-Agent', 'awesome fetcher')
r.add_data(urllib.urlencode({'foo': 'bar'})
response = urllib2.urlopen(r) #post method
I. Requests
使用的是 urllib3,繼承了urllib2的所有特性。Requests支援HTTP連線保持和連線池,支援使用cookie保持會話,支援檔案上傳,支援自動確定響應內容的編碼,支援國際化的 URL 和 POST 資料自動編碼。 II. 舉例:
import requests ... resp = requests.get('http://www.mywebsite.com/user') userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"} resp = requests.post('http://www.mywebsite.com/user', params=userdata) resp = requests.put('http://www.mywebsite.com/user/put') resp = requests.delete('http://www.mywebsite.com/user/delete') resp.json() # 假如返回的是json資料 resp.text #返回的不是text資料 resp.headers['content-type'] #返回text/html;charset=utf-8 f = open('request_index.html', 'w') f.write(page.encode('utf8')) #test 發現requests抓下來的頁面必須要編碼\ #寫入,(抓下來的是unicode),urllib和urllib2抓下來可以直接寫入, #因為這兩者抓下來的page是str
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
III. 其他功能特性
國際化域名和 URLs
Keep-Alive & 連線池
持久的 Cookie 會話
類瀏覽器式的 SSL 加密認證
基本/摘要式的身份認證
優雅的鍵/值 Cookies
自動解壓
Unicode 編碼的響應體
多段檔案上傳
連線超時
支援 .netrc
適用於 Python 2.6—3.4
執行緒安全
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
IV. requests不是python自帶的庫,需要另外安裝 easy_install or pip install
V. requests缺陷:直接使用不能非同步呼叫,速度慢(from others)。官方的urllib可以替代它。
VI. 個人不建議使用requests模組
urllib模組是python自帶的,直接呼叫就好,用法如下:
1 #處理get請求,不傳data,則為get請求 2 import urllib 3 from urllib.request import urlopen 4 from urllib.parse import urlencode 5 url='http://127.0.0.1:1990/login' 6 data={"username":"admin","password":123456} 7 req_data=urlencode(data)#將字典型別的請求資料轉變為url編碼 8 res=urlopen(url+'?'+req_data)#通過urlopen方法訪問拼接好的url 9 res=res.read().decode()#read()方法是讀取返回資料內容,decode是轉換返回資料的bytes格式為str 10 print(res) 11 12 #處理post請求,如果傳了data,則為post請求 13 import urllib 14 from urllib.request import urlopen 15 from urllib.request import Request 16 from urllib.parse import urlencode 17 url='http://127.0.0.1:1990/login' 18 data={"username":"admin","password":123456} 19 data=urlencode(data)#將字典型別的請求資料轉變為url編碼 20 data=data.encode('ascii')#將url編碼型別的請求資料轉變為bytes型別 21 req_data=Request(url,data)#將url和請求資料處理為一個Request物件,供urlopen呼叫 22 with urlopen(req_data) as res: 23 res=res.read().decode()#read()方法是讀取返回資料內容,decode是轉換返回資料的bytes格式為str 24 print(res)
相比較urllib模組,requests模組要簡單很多,具體用法如下:
1 # get請求 2 import requests 3 url='http://127.0.0.1:1990/login' 4 data={"username":"admin","password":123456} 5 res=requests.get(url,data)#直接用requests.get(url,data)即可,其中.get表示為get方法,不需要對字典型別的data進行處理 6 #res=res.text#text方法是獲取到響應為一個str,也不需要對res進行轉換等處理 7 res=res.json()#當返回的資料是json串的時候直接用.json即可將res轉換成字典 8 print(res) 9 10 #post請求 11 import requests 12 url='http://127.0.0.1:1990/login' 13 data={"username":"admin","password":123456} 14 res=requests.post(url,data)#直接用requests.post(url,data)即可,其中.post表示為post方法,不需要對字典型別的data進行處理 15 #res=res.text#text方法是獲取到響應為一個str,也不需要對res進行轉換等處理 16 res=res.json()#當返回的資料是json串的時候直接用.json即可將res轉換成字典 17 print(res) 18 19 #當傳參格式要求為json串時 20 import requests 21 url='http://127.0.0.1:1990/login' 22 data={"username":"admin","password":123456} 23 res=requests.post(url,json=data)#只需要在這裡指定data為json即可 24 #res=res.text#text方法是獲取到響應為一個str,也不需要對res進行轉換等處理 25 res=res.json()#當返回的資料是json串的時候直接用.json即可將res轉換成字典 26 print(res) 27 28 #傳參含cookie 29 import requests 30 url='http://127.0.0.1:1990/login' 31 data={"username":"admin","password":123456} 32 cookie={"sign":"123abc"} 33 res=requests.post(url,json=data,cookies=cookie)#只需要在這裡指定cookies位cookie即可,headers,files等類似 34 res=res.json() 35 print(res)
相關推薦
urllib和request的區別總結
urllib and urllib2 區別–博主提示:下面的是python2中的用法,python3需要做出相應修改。urllib和urllib2模組都做與請求URL相關的操作,但他們提供不同的功能。 urllib2.urlopen accepts an instance o
GET和POST區別總結
get 、post 、區別一、GET和POST區別的普遍看法:HTTP 定義了與服務器交互的不同方法,最常用的有4種,Get、Post、Put、Delete,如果我換一下順序就好記了,Put(增),Delete(刪),Post(改),Get(查),即增刪改查,下面簡單敘述一下:1)Get, 它用於獲取信息,註
Java中equals和==的區別總結
1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;如果作用於引用型別的變數,則比較的是所指向的物件的地址。 2)對於equals方法,equals方法是Object的,所有繼承了Object類的類都有該方法,注意:equals方法不能作用於基本資料型別的變數
Sass、LESS 和 Stylus區別總結
CSS 前處理器技術已經非常的成熟了,而且也湧現出了越來越多的 CSS 的前處理器框架。本文便總結下 Sass、Less CSS、Stylus這三個前處理器的區別和各自的基本語法。 1.什麼是 CSS 前處理器 CSS 前處理器是一種語言用來為 CSS 增加一些程式設計的的
攔截器和過濾器區別總結
因為過濾器Filter是servlet相關的由serviette容器tomcat管理,而攔截器Interceptor是spring管理,因為web程式執行過程就是先啟動tomcat容器,之後再在容器中呼叫spring那些東西,所以首先我猜測順序是先走Filter過濾器 後進
urllib 和 request 對比
在HTTP相關處理中使用python是不必要的麻煩,這包括urllib2模組以巨大的複雜性代價獲取綜合性的功能。相比於urllib2,Kenneth Reitz的Requests模組更能簡約的支援完整的簡單用例。 簡單的例子: 想象下我們試圖使用get方法從
javaweb中重定向和請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別
客戶端 不起作用 這也 方法 cnblogs rect() 獲取url rec alt 先來兩張圖,方便理解: 可以看出,重定向時,是服務器向遊覽器重新發送了一個response命令,讓遊覽器再次向url2發送請求,以獲取url2的資源 而請求轉發時,類似於是服務器自己
pageContext、request、session和application區別
一個 斷網 發出 可能 使用 -s size ssi attr pageContext,request,session,application是指變量(對象)的生命周期,它們都可以通過setAttribute()和getAttribute()來設定或讀取屬性。 pageCo
非接觸IC卡中typeA卡和typeB卡的區別--總結,二者的調制方式和編碼方式不同
優劣 進制數 發送 們的 -1 通過 title 支持 有關 非接觸IC卡中typeA卡和typeB卡的區別--總結,二者的調制方式和編碼方式不同 1.非接觸式IC卡的國際規範ISO/IEC14443的由來? 在非接觸式IC卡的發展過程中,這些問題逐漸被解決並形成通用的標
response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的區別
解決 新的 rain nbsp 響應 服務 war 站點 不知道 轉發方式:request.getRequestDispatcher().forward(); 重定向方式:response.sendRedirect(); 下面是HttpServletResponse.s
ObservableCollection和List的區別總結
con 動態 操作 enume 事件 運行 表示 類的方法 更新 一、繼承的類和接口,還有它們的方法不同 1)ObservableCollection比較簡單,繼承了Collection, INotifyCollectionChanged, INotifyProperty
2018年1月17日總結 css3裏transition 和animation 區別
owin cti 產生 自動 function 屬性。 ans 移動 介紹 transition 和animation兩個CSS3屬性經常被用到實際項目中,想把它整理出來。 1.先介紹transition >>>>> a. 在做項目
Redis和Memcache的區別總結
font 自己 持久性 類型 面具 最大的 利用 eight con 數據類型 redis數據類型豐富,支持set liset等類型 memcache支持簡單數據類型,需要客戶端自己處理復雜對象 持久性 redis支持數據落地持久化存儲 memcac
HTTP請求中的form data和request payload的區別(request 後臺無法獲取參數)
origin logger res 部分 padding ble 處理 代碼 恰恰 轉載自:btg.yoyo jQuery的ajax方法和post方法分別發送請求,在後臺Servlet進行處理時結果是不一樣的,比如用$.ajax方法發送請求時(data參數是一個JSON.
request.form()和request()的區別
限制 數據信息 顯示 for clas https ref ble 地址欄 Request.Form:獲取以POST方式提交的數據(接收Form提交來的數據);Request.QueryString:獲取地址欄參數(以GET方式提交的數據)Request:包含以上兩種方式(
request.getAttribute() 和 request.getParameter() 有何區別?
傳遞 數據類型 get 客戶端 傳遞數據 永遠 object string類 ram 當你要傳遞普通的數據類型給下一個頁面時,你在下一個頁面中就可以用getParameter()方法來獲得上一個頁面傳遞過來的數據了!(普通的數據類型是指int,float,double,st
springmvc-Model和ModelAndView的區別以及和request的區別
前言 用過springMvc的小夥伴都知道,一般而言我們返回頁面檢視的時候會有兩種可能,就是本文題目中的兩個類。其實本文就是想要對比一下這兩個類在spring的檢視解析中的作用以及區
簡單解析request.getParameter(String arg0)方法和request.getAttribute()方法的區別
1.request.getParameter(String arg0)方法 當兩個web元件為連結關係時,被連結元件通過getParameter()方法來獲得引數(獲取Http提交過來的資料如表單) 例: <%@ page language="java" import="jav
說說&和&& |和||的區別 及關於位操作符的使用和總結
參考資料: 張孝祥老師整理的Java就業面試題大全 Java開發實戰經典(李興華老師) 及http://hi.baidu.com/onjee/blog/item/4e902d1f3450040f304e15ca.html package src;/** 本示例演示&和&
select 和 epoll 的區別總結
在Linux中,select 和epoll函式,都是為了監控大量的描述符,是一種I/O多路複用技術。下面總結它們的區別: select 與 epoll區別 1、開啟的最大描述符數量限制 select 檔案描述符使用的是linux ext3,因此開啟數量受限制,一