【Python】requestで403エラーが出るときの原因など
概要
pythonのrequestモジュールを使ってhttpリクエストした際に403エラーに遭遇することがあります。
import requests
r = requests.get('<url>')
print(r.status_code)
> 403
このような場合のあるあるを書きます。
ID/PASS間違い
postメソッドで認証情報を渡す場合などにID, PWを間違えており、403で返ってきたことがありました。
request.post('http://<url>', data={'id':'id', 'pw':'pw'})
URL間違い
あるわけないと思いますが良くあります。特にURLがレスポンスを返してくれるところまで書いてない場合など。
“api”まで含めないとレスポンス返してもらえない場合
#NG例
http://urltesttesttest.com
#OK例
http://urltesttesttest.com /api
ADドメインの外からアクセス
ドメインの外にいる端末から一生懸命リクエスト送っている場合など。名前解決できない場合などはIP直打ちする必要あり。
名前解決できない場合
#NG例
request.post('http://domainserver01.com')
#OK例
request.post('http://192.168.1.1')
プロキシがうまく設定できていない
プロキシを介してインターネットへリクエストする場合はプロキシを明示的に指定しておくのが安心です。
proxies = {
"http":"http://httpproxy***.com",
"https":"https://httpproxy***.com"
}
request.get('http://<url>', proxy = proxies)
プロキシが邪魔してくる
逆にインターネットに出ていかずにLAN内のサーバーにアクセスしたい場合にはプロキシを明示的に無効化しておくのがいいです。
proxies = {
"http":None,
"https":None
}
request.get('http://<url>', proxy = proxies)
まとめ
requestメソッドはネットワークもトラブルシューティングの範囲に入ってくるのでハマるときはハマります。一回遭遇した事象はしっかり覚えておきたいです。
参考とさせて頂いたサイト
https://qiita.com/koharite/items/731fcf5146c7b0c4e800
Pythonに関する書籍