1. 程式人生 > >urllib庫傳送get和post請求

urllib庫傳送get和post請求

urllib是Python中內建的傳送網路請求的一個庫(包),在Python2中由urllib和urllib2兩個庫來實現請求的傳送,但是在Python中已經不存在urllib2這個庫了,已經將urllib和urllib2合併為urllib。
urllib是一個庫(包),request是urllib庫裡面用於傳送網路請求的一個模組

1.傳送一個不攜帶引數的get請求

 

import urllib.request
#發起一個不攜帶引數的get請求
response=urllib.request.urlopen('http://www.baidu.com')
print(response.reason)
#呼叫status屬性可以此次請求響應的狀態碼,200表示此次請求成功 print(response.status) #呼叫url屬性,可以獲取此次請求的地址 print(response.url) print(response.headers) #由於使用read方法拿到的響應的資料是二進位制資料,所有需要使用decode解碼成utf-8編碼 # print(response.read().decode('utf-8'))

 

2.傳送一個攜帶引數的get請求

import urllib.request
import urllib.parse
#http://www.yundama.com/index/login?username=1313131&password=132213213&utype=1&vcode=2132312
# 定義出基礎網址 base_url='http://www.yundama.com/index/login' #構造一個字典引數 data_dict={ "username":"1313131", "password":"13221321", "utype":"1", "vcode":"2132312" } # 使用urlencode這個方法將字典序列化成字串,最後和基礎網址進行拼接 data_string=urllib.parse.urlencode(data_dict) print(data_string) new_url=base_url+"
?"+data_string response=urllib.request.urlopen(new_url) print(response.read().decode('utf-8'))

3.構造一個攜帶引數的POST請求

import urllib.request
import urllib.parse
#測試網址:http://httpbin.org/post

#定義一個字典引數
data_dict={"username":"zhangsan","password":"123456"}
#使用urlencode將字典引數序列化成字串
data_string=urllib.parse.urlencode(data_dict)
#將序列化後的字串轉換成二進位制資料,因為post請求攜帶的是二進位制引數
last_data=bytes(data_string,encoding='utf-8')
#如果給urlopen這個函式傳遞了data這個引數,那麼它的請求方式則不是get請求,而是post請求
response=urllib.request.urlopen("http://httpbin.org/post",data=last_data)
#我們的引數出現在form表單中,這表明是模擬了表單的提交方式,以post方式傳輸資料
print(response.read().decode('utf-8'))

 

4.補充:

如果直接將中文傳入URL中請求,會導致編碼錯誤。我們需要使用quote() ,對該中文關鍵字進行URL編碼

 

import urllib.request
city=urllib.request.quote('鄭州市'.encode('utf-8'))
response=urllib.request.urlopen('http://api.map.baidu.com/telematics/v3/weather?location={}&output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?'.format(city))
print(response.read().decode('utf-8'))