首頁 >後端開發 >Python教學 >Python 中的POST/GET套件建置以及隨機字串的生成

Python 中的POST/GET套件建置以及隨機字串的生成

高洛峰
高洛峰原創
2016-10-18 11:22:311123瀏覽

現在,我們來用Python,創建GET套件和POST套件。

至於有什麼用處,大家慢慢體會。

Python 中包含了大量的函式庫,作為一門新興的語言,Python 對HTTP有足夠強大的支援。

現在,我們引入新的庫 httplib 以及 urllib

這兩個庫根據名稱,我們可以知道他們是對於HTTP以及URL的操作。

首先我們要與伺服器建立連線。 (我們以某微博作為範例實現下文的各種功能)

conn = httplib.HTTPConnection("ti50*****com");

只要沒有提示錯誤,我們就可以認為連接已成功,下面就可以進行資料包發送了。

在上文中我們說過了GET包的結構,只有HEARDER 部分。而在httplib中,heaer 是透過一個字典來保存的。下面我們來定義它:

headers = {"Content-Type": "application/x-www-form-urlencoded",

  "Accept": "text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8",

  "Referer": "http://ti50.*****com/g/s?sid=*********** **********",

  "Accept-Encoding": "",

  "Accept-Language": "zh-CN,zh;q=0.8",

  "Accept-Charset" : "GBK,utf-8;q=0.7,*;q=0.3",

  "Cookie": Cookie  }

Accept-Encoding 我們刪除了其內容,這對伺服器來說我們客戶端不能接受任何壓縮的格式,資料包將用原始資料發送回來,這樣我們就可以省去解壓縮的過程直接分析網頁了,但是這樣做的後果是流量大,網路實時性差。關於解壓縮​​自然有別的函式庫來專門處理。

然後我們可以直接發送了。

conn.request(method="GET",url='''http://ti50****com/g/s?*********_TK9EH&r=''' + go_num + ' ''&aid=amsg&bid=******=true&ifh=1&ngpd=false''',headers=headers);

method 欄位說明是傳送何種類型的資料包。

url 欄位以字串的形式定義位址

header 欄位定義包頭。

一般來說,一個資料包發送至伺服器,伺服器會相應的回傳一個應答包。而這個應答包對於我們往往是有用的,我們用下面的命令來取得應答包。

response = conn.getresponse();

對於上面這條語句中的括號,其表示讀取應答包的前多少個字元。

POST套件與GET套件的創建過程基本上相同。

只是我們需要新定義BODY,這個部分可以用字串的方式來定義。

params = 'msg=***************************'

我們還是需要先於伺服器進行連線。

conn = httplib.HTTPConnection("ti50*****com");

conn.request(method="POST",url='''/g/s?sid=**** **************&ngpd=false''',body=params,headers=headers);

可以發現上面的這個公式和發送GET包的格式略有差距。

method 改變了。

url 裡面沒有寫網域。

多了一個body 欄位。

其中第二條可以想到,如果沒定義域名,則係統將最近一次與伺服器的連接用的域名進行替換。

取得應答包的方式與GET包相同。

亂七八糟的小應用。

(一) 隨機字串的產生。

當我們用POST做一些很有趣的事情時,常常會遇到伺服器驗證神馬的,有時候我們可以用隨機字串來處理這樣的情況。

python 中給了隨機數的函式庫… random。

對於簡單的應用非常方便。例如我們產生a與b 之間的一個隨機整數。

random.randint(a,b)

>>> random.randint(10,20)

>>> 15

知道了這一步,我們可以很簡單的寫一個隨機字串的程式了,

from random import Random
def random_str(randomlength):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

顯然當呼叫此函數時應該給出隨機字串長度。

當然,我們也可以透過修改chars中的字元來定義隨機字串中的字元。

(二) 程式運行時間

我們現在給一個非常不精確的程式時間計算方法,

from time import clock as now
start = now()
finish = now()
run_time = finish - start
print run_time


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn