python post有随机字符串_Python 中的POST/GET包构建以及随机字符串的生成
現(xiàn)在,我們來(lái)用Python,創(chuàng)建GET包和POST包。
至于有什么用處,大家慢慢體會(huì)。
Python 中包含了大量的庫(kù),作為一門新興的語(yǔ)言,Python 對(duì)HTTP有足夠強(qiáng)大的支持。
現(xiàn)在,我們引入新的庫(kù) httplib 以及 urllib
這兩個(gè)庫(kù)根據(jù)名稱,我們可以知道他們是對(duì)于HTTP以及URL的操作。
首先我們先要與服務(wù)器建立連接。(我們以某微博作為例子實(shí)現(xiàn)下文的各種功能)
conn = httplib.HTTPConnection("ti50*****com");
只要沒(méi)有提示錯(cuò)誤,我們就可以認(rèn)為連接已成功,下面就可以進(jìn)行數(shù)據(jù)包發(fā)送了。
在上文中我們說(shuō)過(guò)了GET包的結(jié)構(gòu),只有HEARDER 部分。而在httplib中,heaer 是通過(guò)一個(gè)字典來(lái)保存的。下面我們來(lái)定義它:
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 我們刪除了其內(nèi)容,這對(duì)于服務(wù)器來(lái)說(shuō)我們客戶端不能接受任何壓縮的格式,數(shù)據(jù)包將用原始數(shù)據(jù)發(fā)送回來(lái),這樣我們就可以省去解壓縮的過(guò)程直接分析網(wǎng)頁(yè)了,但是這樣做的后果是流量大,網(wǎng)絡(luò)實(shí)時(shí)性差。關(guān)于解壓縮自然有別的庫(kù)來(lái)專門處理。
然后我們可以直接發(fā)送了。
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 字段說(shuō)明是發(fā)送何種類型的數(shù)據(jù)包。
url 字段以字符串的形式定義地址
header 字段定義包頭。
一般來(lái)說(shuō),一個(gè)數(shù)據(jù)包發(fā)送至服務(wù)器,服務(wù)器會(huì)相應(yīng)的返回一個(gè)應(yīng)答包。而且這個(gè)應(yīng)答包對(duì)于我們往往是有用的,我們用下面的命令獲取應(yīng)答包。
response = conn.getresponse();
對(duì)于上面這條語(yǔ)句中的括號(hào),其表示讀取應(yīng)答包的前多少個(gè)字符。
POST包與GET包的創(chuàng)建過(guò)程基本相同。
只是我們需要新定義BODY,這個(gè)部分可以用字符串的方式進(jìn)行定義。
params = 'msg=***************************'
我們?nèi)匀恍枰扔诜?wù)器進(jìn)行連接。
conn = httplib.HTTPConnection("ti50*****com");
發(fā)送
conn.request(method="POST",url='''/g/s?sid=******************&ngpd=false''',body=params,headers=headers);
可以發(fā)現(xiàn)上面的這個(gè)公式和發(fā)送GET包的格式略有差距。
method 改變了。
url 里面沒(méi)有寫域名。
多了一個(gè)body 字段。
其中第二條可以想到,如果沒(méi)定義域名,則系統(tǒng)將最近一次與服務(wù)器的連接用的域名進(jìn)行替換。
獲取應(yīng)答包的方式與GET包相同。
亂七八糟的小應(yīng)用。
(一) 隨機(jī)字符串的生成。
當(dāng)我們用POST做一些很有趣的事情時(shí),常常會(huì)遇到服務(wù)器驗(yàn)證神馬的,有時(shí)候我們可以用隨機(jī)字符串來(lái)處理這樣的情況。
python 中給了隨機(jī)數(shù)的庫(kù)…… random。
對(duì)于簡(jiǎn)單的應(yīng)用非常方便。例如我們產(chǎn)生a與b 之間的一個(gè)隨機(jī)整數(shù)。
random.randint(a,b)
>>> random.randint(10,20)
>>> 15
知道了這步,我們可以很簡(jiǎn)單的編寫一個(gè)隨機(jī)字符串的程序了,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
顯然當(dāng)調(diào)用此函數(shù)時(shí)應(yīng)該給出隨機(jī)字符串長(zhǎng)度。
當(dāng)然,我們也可以通過(guò)修改chars中的字符來(lái)定義隨機(jī)字符串中的字符。
(二) 程序運(yùn)行時(shí)間
我們現(xiàn)在給出一個(gè)非常不精確的程序時(shí)間計(jì)算方法,from time import clock as now
start = now()
finish = now()
run_time = finish - start
print run_time
總結(jié)
以上是生活随笔為你收集整理的python post有随机字符串_Python 中的POST/GET包构建以及随机字符串的生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle pdb还原为no-cdb,
- 下一篇: 深度学习笔记:windows+tenso