1. 程式人生 > >requests的高階用法(1)

requests的高階用法(1)

1.會話物件

1)會話物件能夠跨請求保持某些引數,會在同一個session例項發出的所有請求之間保持cookie;(Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案;session是儲存在伺服器上的資訊。)

>>> s = requests.Session()
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
<Response [200]>
>>> r = s.get("http://httpbin.org/cookies")
>>> print(r.text)
{
  "cookies": {
    "sessioncookie": "123456789"
  }
}

2)會話也可以用來為請求方法提供預設資料,如下

>>> s = requests.Session()
>>> s.auth = ('user','pass')
>>> s.headers.update({'x-test': 'true'})
>>> #both 'x-test' and 'x-test2' are sent
...
>>> s.get('http://httpbin.org/headers', headers = {'x-test2': 'true'})
<Response [200]>

3)需要注意即使使用了會話,方法級別的引數也不會被跨請求保持,

>>> s = requests.Session()
>>> r = s.get('http://httpbin.org/cookies', cookies = {'from-my': 'browser'})
>>> print(r.text)
{
  "cookies": {
    "from-my": "browser"
  }
}

>>> #就算使用了會話,方法級別的引數也不會別跨請求保持(個人理解:瀏覽器第一次傳送請求時,會生成一個hash table和sessionID
...
>>> #跨請求--第二次請求,方法級別的引數不會被保持
...
>>> r = s.get('http://httpbin.org/cookies')
>>> print(r.text)
{
  "cookies": {}
}

4)從字典引數中移除一個值

若想省略字典引數中一些會話層的鍵,在方法層的引數中將該鍵值置為None,鍵值便會被自動略掉。

2.請求與響應物件

1)requests.get()的呼叫

(1)是在構建request物件,該物件將被髮送到某個伺服器請求或查詢一些資源;

(2)ruquests一旦得到一個從伺服器返回的響應後,就會生成一個response物件,該物件包含伺服器返回的所有資訊以及request物件的內容

>>> r = requests.get('http://httpbin.org/cookies')
>>> r.headers #伺服器返回給我們的響應頭部資訊
{'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Date': 'Mon, 19 Nov 2018 03:47:28 GMT', 'Content-Type': 'application/json', 'Content-Length': '20', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Via': '1.1 vegur'}
>>> r.requests.headers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Response' object has no attribute 'requests'
>>> r.request.headers #傳送到伺服器的請求頭部資訊
{'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
>>>

3.準備的請求(個人也不太理解,暫時附上對這段程式碼的註釋)

from requests import Request,Session

s = Session()  #建立一個session物件
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'user-agent': 'my-app/0.0.1'}
#傳送get請求
req = Request('GET', 'https://www.csdn.net/',
    data=payload,
    headers=headers
)
#建立一個請求準備物件
prepped = s.prepare_request(req)

# do something with prepped.body
# do something with prepped.headers

#再次向伺服器傳送請求
resp = s.send(prepped)
#列印返回碼
print(resp.status_code)

相關推薦

requests高階用法1

1.會話物件 1)會話物件能夠跨請求保持某些引數,會在同一個session例項發出的所有請求之間保持cookie;(Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案;session是儲存在伺服器上的資訊。) >

Yii2 cache的用法1

數據庫 強制 style 環境 new xca led 內容 expr 數據緩存需要緩存組件提供支持,它代表各種緩存存儲器, 例如內存,文件,數據庫。 ‘components‘ => [ ‘cache‘ => [ ‘cla

Revit二次開發高階應用1——利用wcf做簡單的族庫管理

因為對應用場景不是特別明確,暫時就用wcf做一個可以上傳和下載的功能來管理族庫。 1、用WCF做服務端的上傳下載管理 首先新增上傳下載的介面: [ServiceContract] public interface IFileService { //上傳

JAVA高階基礎1---集合框架的認識

集合 集合的由來 通常,我們的程式需要根據程式執行時才知道建立多少個物件。但若非程式執行,程式開發階段,我們根本不知道到底需要多少個數量的物件,甚至不知道它的準確模型。為了滿足這些常規的程式設計需要,我們要求能在任何時候,任何地點建立任意數量的物件,而這些物件用什麼來容納呢?我們首先想到

ES6 Generator函式之基本用法1

Generator函式之基本用法 (1)基本概念 Generator函式是ES6 提供的一種非同步程式設計解決方案,語法與傳統函式完全不同。 Generator函式與普通函式在寫法上的不同 1.function命令與函式名之間有一個星號(*)。 2.函式體內部使用yield語

很多人不瞭解的嵌入式C高階用法

本文來自網路 1、記憶體管理 我們需要知道——變數,其實是記憶體地址的一個抽像名字罷了。在靜態編譯的程式中,所有的變數名都會在編譯時被轉成記憶體地址。機器是不知道我們取的名字的,只知道地址。  記憶體的使用時程式設計中需要考慮的重要因素之一,這不僅由於系統記憶體是有限

8章 RxJava高階用法

CSDN學院課程地址 RxJava2從入門到精通-初級篇:https://edu.csdn.net/course/detail/10036 RxJava2從入門到精通-中級篇:https://edu.csdn.net/course/detail/10037

7章 RxJava高階用法

CSDN學院課程地址 RxJava2從入門到精通-初級篇:https://edu.csdn.net/course/detail/10036 RxJava2從入門到精通-中級篇:https://edu.csdn.net/course/detail/10037

十二vue.js元件——元件高階用法5

1)遞迴元件 類似於js函式可以遞迴一樣,元件也可以遞迴呼叫,即自己呼叫自己。 要實現元件遞迴,過程如下: 1.第一步:給元件本身加上一個name屬性 2.第二步:當然為了遞迴時不會無限的執行下去,你必須加一個結束條 件來限制遞迴數量。 3.第三步:實現一次呼叫

STL的常見用法1

1.vector 定義:vector<typename> name; typename 表示可以是任何基本型別,int, doubel, char, 結構體,也可以是STL標準容器,例如vector, set, queue 等。 例如:vector<vector<in

scala學習 之 及 基本和高階用法

目錄 1. Scala的資料型別 2. Scala變數 3. Scala 訪問修飾符 4. Scala 方法和函式 5. Scala陣列 6. Collection(集合) 7. Scala的類和物件 8. Scala的介面trait 9

PyQt訊號與槽之訊號與槽的高階用法

裝飾器訊號與槽 所謂裝飾器訊號與槽,就是通過裝飾器的方法來定義訊號與槽函式,具體的使用方法如下 @PyQt5.QtCore.pyqtSlot(引數) def on_傳送者物件名稱)發射訊號名稱(self,引數): pass 這種方法有效的前提是

【深入Java基礎】HashMap高階用法:排序

HashMap高階用法(一):排序 根據key排序 HashMap是無序的,我們可以根據key進行升序或降序。 1.利用List和Collections來實現排序 先獲取HashMap的keySet,然後將keySet放入List,在由Collectio

程式設計與演算法第十週 c++新特性和c++高階主題 1

#include <iostream> using namespace std; class A{}; A operator+(int n, const A& a) { return a; } template<class T1, class

跟我一起學windows初高階除錯1 --你為什麼要學除錯

                   跟我一起學windows初高階除錯之你為什麼要學除錯       本系列文章使用C/C++語言,vs自帶偵錯程式和windbg等其他相關除錯工具,介紹windows

UNIX環境高階程式設計1:UNIX基礎知識1

本系列文章是學習被譽為UNIX程式設計聖經的《UNIX環境高階程式設計》的讀書筆記。《UNIX環境高階程式設計》的英文全稱為《Advanced Programming in the UNIX Envi

block的高階用法 -- block傳值

我們先從簡單的入手,先講下block的傳值,後面會有更精彩的。 在講傳值之前我們先複習下block的基礎知識: - (void)viewDidLoad { [super viewDidLoa

Python高階特性1:Iterators、Generators和itertools

【譯註】:作為一門動態指令碼語言,Python對程式設計初學者而言很友好,豐富的第三方庫能夠給使用者帶來很大的便利。而Python同時也能夠提供一些高階的特性方便使用者使用更為複雜的資料結構。本系列文章共有三篇,本文是系列的第一篇,將會介紹迭代器、生成器以及iter

SilverLight 5 資料繫結的高階話題1

至此,您已經掌握如何將UI控制元件與物件進行繫結以使使用者可以檢視和編輯這些物件所暴露的資料。資料不是被推進控制元件的,而是通過XMAL提供的繫結將資料拉進控制元件裡。換言之,繫結是控制元件讀取資料的過程。在此前幾章裡已經介紹瞭如下資訊: l 將資料物件分配到控制元件的DataContext屬性; l 有三

Axis2用法1JAVA2WSDL和WSDL2JAVA

1、Axis2簡介 Web Service是現在最適合實現SOA的技術,而Axis2是實現Web Service的一種技術框架。Axis2提供了較多的工具以便開發者使用,比如:java2wsdl和wsdl2java。深入使用Axis2框架前,說明下java2wsdl和wsd