###前提・実現したいこと
サーバーから提供されているwebAPIを叩いてデータを定期的に取得するソフトを作っております。
なるべく相手のサーバーへ負荷をかけないように、問い合わせ毎の通信量を測定して取得時間の間隔を調整したく思っております。
データ取得にはurllib.requestのurlopenを使用しております。
Python
1response = urlopen(url)
pythonにて通信量(送受信量)を測定する場合はどういった方法を取ればよいでしょうか?
測定に便利なmoduleがある等、ご存知でしたらご教示いただけますでしょうか?
###試したこと
reponseのパラメータを見たところ、response.lengthという値がありますが、
通信量が直接この値ではないような気がしています。(httpヘッダの知識があまりないです)
pythonでの通信量測定方法がわからなかったので、
とりあえずwiresharkを用いてパケットキャプチャを試みました。
差し当たり、対象サーバーへの1問い合わせ時の通信量は分かりましたが、
なんだかpythonでもっとスマートにできそうな気がしており、詳しい方にお聞きしたく思います。
###補足情報(言語/FW/ツール等のバージョンなど)
Python3
pyCharm
###(追記)手法調査中
- requestsに何か良い感じの値がないか
-- 無かった。でも応答時間はあったので、他の用途で使えることがあるかも。
- pysnmpを利用する
- scapyを利用する
- WireSharkの結果を元にContents-lengthから逆算して泥臭く計算する
-- 正確な仕様ではないし、誤差が大きそうです。Not Pythonicです・・・。
python
1#サーバーからの受信量を、contents-lengthから逆算する 2url = "http://XXXXX.com/api/?out=json" 3response = urlopen(url) 4data_len = response.length 5 6#WireSharkでキャプチャした値を参考に逆算して通信量(受信量)を組み立てる 7ip_tr_size = (66+60+60) + 60 # SYN ACK,ACK,FIN ACK / + 追加でACKがあることがある 8data_segments = math.ceil(data_len / 1414) # segment分割数 / MRUのサイズで分割する / 1414 9data_tr_overhead = (54 * data_segments) # segment分割分のoverhead 10httpheader_size = 250 # tcp segment len - response.lengs / マージン+20byte程度 / 正確な算出方法分からない 11 12total_comm_size = data_len + ip_tr_size + data_segments + data_tr_overhead + httpheader_size

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/22 15:02