416 Error of Requests [Python3]

416 Error of Requests [Python3]


donald chi / 2017-11-15 21:12

音声ファイル作成中...
Audio: Visited: 1400


背景

PythonのRequestsライブラリとBeautifulSoapを使ってウェブページのクローリングをやっていたら、あるサイトにページをrequestした時、 416というエラーコードを返していました。

問題点

調べて見ると、サイトのサーバー側でrequestのヘットファイルをみて、ブラウザーからのリクエストかを判断し、そうでない場合ブロックするように設定したのが原因だそうです。

解決案

解決方法は簡単です。requestsの設定でUser-Agentをブラウザーに設定すれば解決できるのです。

User-Agentの情報は, chromeの develop tools -> network->name の下で、該当ページに当たるurlを クリックすることで、下のように取得することができます。

スクリーンショット 2017-11-15 20.56.39.png

以下はサンプルコードです。

#!/usr/bin/env python3
# coding: utf-8

import requests

url = 'ウェイブページURL'

headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.10'
}
r = requests.get(url, verify=True, headers=headers)

print(r.status_code)

備考

セキュリティ性が高いサイトではこれでもうまくいかない場合があります。

上の設定でサーバーからresponseをもらうようにはなったが、 error message表示のためのページが帰ってくるのです。

これは、サーバー側でUser-Agentをcheckするだけではなく、Cookieも checkしているからです。

もちろん、上と同じようにCookieの該当部分をheadersに指定することで解決可能ですが、 問題は、このCookieの中のある情報には有効期間があって、数秒、数分ごとに手作業で 入れ替えなければならないという点です。


0

0

Share with: Facebook Twitter Google+ LinkedIn Wechat Email Print
Tags: request

Comments: 2 件


ewohovuyab
okaiiken@ser.namnerbca.com

http://mewkid.net/where-is-xena/ - Amoxicillin <a href="http://mewkid.net/where-is-xena/">Buy Amoxicillin Online</a> lqq.kvgf.ganbaruyo.net.egr.ff http://mewkid.net/where-is-xena/

ahgoriyemayul
weraqin@ser.namnerbca.com

http://mewkid.net/where-is-xena/ - Amoxicillin Online <a href="http://mewkid.net/where-is-xena/">Amoxicillin 500 Mg Dosage</a> lio.lijp.ganbaruyo.net.flh.ey http://mewkid.net/where-is-xena/

Add Comment

Name:
Email:
Comment: