Python模擬HttpRequest的方法總結

MadisonPKS 8年前發布 | 12K 次閱讀 Python Python開發

來自: http://www.cnblogs.com/myprogram/p/5183301.html

Python可以說是爬網的利器,本文主要介紹了一些python來模擬http請求的一些方法和技巧。

Python處理請求的類庫有兩個,urllib,urllib2。 這兩個類庫并不是一個類庫的兩個不同版本,urllib主要用來處理一些url相關的內容,發送請求的時候,請求對象只能是一個url。urllib2可以用request對象來實現請求,這樣就可以實現如偽造頭部,設置代理,http get,http post等方法。

閱讀本文需要了解http請求的一些基本知識,如:

  • 什么是httpwebrequest,httpwebresponse
  • 什么是get,post
  • 什么是cookie

本文主要介紹模擬請求用到的這些方式:

  • 設置代理
  • 偽造頭部或者Header信息
  • 啟用cookie
  • url參數的處理

使用urllib2.urlopen直接發送

import urllib2

url = 'http://www.baidu.com/'
response = urllib2.urlopen(url) ##urlopen接受傳入參數是string或者是request
response_text = response.read()

使用urllib.build_opener

直接發送請求

import urllib2

url = 'http://www.baidu.com/'

opener = urllib2.build_opener()
response = opener.open(url)
response_text = response.read()

通過代理訪問站點

proxy_handler = urllib2.ProxyHandler({"http" : 'http://localhost:8888'})
opener = urllib2.build_opener(proxy_handler)
response = opener.open(url)
response_text = response.read()

請求中附帶request body(http post)

opener = urllib2.build_opener()
response = opener.open(url,'request body')
response_text = response.read()

body中如果是key-value形式的,可以參照下面的url處理部分來處理

啟用Cookie

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(url)
response_text = response.read()

使用urllib2.Request

請求中添加自定義的Header信息

request = urllib2.Request(url)
request.add_data('1234567')
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

處理url中的參數信息

無論是使用get方式還是post方式,經常會遇到需要使用參數的形式,處理參數可以使用下面的類庫

參數集合轉string

para = {'111':'222','aaa':'bbb'}
encodeurl = urllib.urlencode(para)
輸出aaa=bbb&111=222

url參數轉dictionary

url = 'https://www.baidu.com/s?wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3'

splitresult_instance = urlparse.urlsplit(url)

輸出對象:

SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3', fragment='')

想轉成集合只要

result_dic=urlparse.parse_qs(splitresult.query)

通過這種處理方式,把data信息放在url上來實現http get,放在body中實現http post。

 本文由用戶 MadisonPKS 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!