本文目錄一覽:
- 1、Python的 request 庫,請求頭是什麼?
- 2、Python爬蟲雜記 – POST之multipart/form-data請求
- 3、python requests get方式怎麼設置請求頭?
- 4、Python爬蟲之Header
- 5、python得到客戶端的請求頭
- 6、如何用Python寫一個http post請求
Python的 request 庫,請求頭是什麼?
就是headers,照抄瀏覽器F12里那一堆就行,如下圖,請求標頭下面所有內容都是。
Python爬蟲雜記 – POST之multipart/form-data請求
原以為requests請求十分強大, 但遇到了模擬multipart/form-data類型的post請求, 才發現requests庫還是有一丟丟的不足。 不過也可能是我理解的不足, 還希望讀者老爺不吝指教! 在此感謝!
enctype屬性:
enctype:規定了form表單在發送到服務器時候編碼方式,它有如下的三個值。
①application/x-www-form-urlencoded:默認的編碼方式。但是在用文本的傳輸和MP3等大型文件的時候,使用這種編碼就顯得 效率低下。
②multipart/form-data:指定傳輸數據為二進制類型,比如圖片、mp3、文件。
③text/plain:純文體的傳輸。空格轉換為 “+” 加號,但不對特殊字符編碼。
值得注意的是:請求頭的Content-Type屬性與其他post請求的不同
總註:上邊這兩種構建參數的方式各有不同, 用起來感覺並不是那麼的靈活,所以感嘆requests有那麼一丟丟丟的不足。值的注意的是,requests.post中files參數接收字典的形式和encode_multipart_formdata中params參數接收字典形式的區別!人生苦短……
python requests get方式怎麼設置請求頭?
Header可以通過Request提供的.add_header()方法進行添加,示例代碼如下:
123456789101112# -*- coding:utf-8 -*-
import urllib2import urlliburl = ”half_url = u’/servlet/av/jd?
ai=782ji=2624743sn=I’#構造get請求req = urllib2.
Request(url+half_url.
encode(‘utf-8’))#添加headerreq.add_header(‘AcceptEncoding’, ‘gzip,deflate’)req.
add_header(‘User-Agent’,’Mozilla/5.0′)response = urllib2.
urlopen(req)
print response.
Requests支持流式上傳,這允許你發送大的數據流或文件而無需先把它們讀入內存。要使用流式上傳,僅需為你的請求體提供一個類文件對象即可。
讀取文件請使用字節的方式,這樣Requests會生成正確的Content-Length。
with open(‘massive-body’, ‘rb’) as f:
requests.post(”, data=f)
分塊傳輸編碼
對於出去和進來的請求,Requests也支持分塊傳輸編碼。要發送一個塊編碼的請求,僅需為你的請求體提供一個生成器
注意生成器輸出應該為bytes
def gen():
yield b’hi’
yield b’there’
requests.post(”, data=gen())
For chunked encoded responses, it’s best to iterate over the data
using Response.iter_content(). In an ideal situation you’ll have set stream=True on the
request, in which case you can iterate chunk-by-chunk by calling iter_content with a chunk
size parameter of None. If you want to set a maximum size of the chunk, you can set a chunk
size parameter to any integer.
Python爬蟲之Header
HTTP “請求頭信息” Request Header 是向服務端提供客戶端的信息,“響應頭信息” Response Header 是服務端向客戶端提供請求文檔信息或服務器的狀態信息,服務端判斷服務端的身份,就是通過 Header 來判斷的,所以爬蟲通過設置 Header 來隱藏自己相當重要。
一個完整的HTTP請求包含以下部分:
請求方法 URL HTTP版本
請求頭信息
請求數據
一個空行,請求的結束行
常見的請求頭:
Accept :客戶端接收的數據類型,如:Accept:text/html
User Agent :客戶端軟件類型
Authorization :認證消息,包括用戶名和口令
Referer :用戶獲取的Web頁面
真實的請求頭信息會更多,下面是豆瓣某短評的真實請求頭:
一個完整的HTTP響應包含以下部分:
狀態行
響應頭
響應數據
常見的狀態行:
更多狀態碼查看: HTTP狀態碼
常見的響應頭:
Server :Web服務器程序的信息
Date :當前服務器的日期和時間
Last Modified :請求文檔最近一次修改的時間
Expires :請求文檔過期時間
Content-length :數據長度(字節)
Content-type :數據MIME類型
WWW-authenticate :用於通知客戶方需要的認證信息,如用戶名,口令等
下面是豆瓣某短評的真實響應頭:
Python使用Requests來請求的時候,如果沒有設置Header,Header是空的,設置Header的方法如下:
python得到客戶端的請求頭
http-server能提供的環境變量是有限的,一般是基於標準的cgi接口實現,這樣就難免會去除一些不常用到的信息。如果想獲取完整頭信息只能自己實現,或者是使用python實現的http-server。如webpy中就可以通過web.ctx.env訪問header信息。
webpy項目中:
class index:
def GET(self):
for k in web.ctx.env:
print k, web.ctx.env[k]
運行結果:
D:\python code.py
HTTP_COOKIE webpy_session_id=33d6e36b5ba97b4b8047508d38aac8b045dc09d2
SERVER_SOFTWARE CherryPy/3.2.0 Server
SCRIPT_NAME
ACTUAL_SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
PATH_INFO /
SERVER_PROTOCOL HTTP/1.1
QUERY_STRING
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gec
ko) Chrome/35.0.1916.114 Safari/537.36
HTTP_CONNECTION keep-alive
REMOTE_PORT 1842
SERVER_NAME localhost
REMOTE_ADDR 127.0.0.1
wsgi.url_scheme http
SERVER_PORT 8080
wsgi.input web.wsgiserver.KnownLengthRFile object at 0x013D8E10
HTTP_HOST localhost:8080
wsgi.multithread True
HTTP_CACHE_CONTROL max-age=0
REQUEST_URI /
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*
;q=0.8
wsgi.version (1, 0)
wsgi.run_once False
wsgi.errors open file ‘stderr’, mode ‘w’ at 0x00BA60D0
wsgi.multiprocess False
HTTP_ACCEPT_LANGUAGE zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2
HTTP_ACCEPT_ENCODING gzip,deflate,sdch
127.0.0.1:1842 – – [28/May/2014 15:13:29] “HTTP/1.1 GET /” – 200 OK
如何用Python寫一個http post請求
可以參考如下三種方法:
一、application/x-www-form-urlencoded
import urllib
url = “”
body_value = {“package”: “com.tencent.lian”,”version_code”: “66” }
body_value = urllib.urlencode(body_value)
request = urllib2.Request(url, body_value)
request.add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、multipart/form-data
需要利用python的poster模塊,安裝poster:pip install poster
代碼:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
url = “”
body_value = {“package”: “com.tencent.lian”,”version_code”: “66” }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有請求頭數據,則添加請求頭
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、application/json
import json
url = “”
body_value = {“package”: “com.tencent.lian”,”version_code”: “66” }
register_openers()
body_value = json.JSONEncoder().encode(body_value)
request = urllib2.Request(url, body_value)
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
原創文章,作者:CURX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140328.html
微信掃一掃
支付寶掃一掃