0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

requestsで返ってくるステータスコードについて

Posted at

はじめに

今日webスクレイピング関係の処理が失敗しているのを見つけ、その原因を探していました。
ログを確認するとステータスコードは200であったため、ページの構造でも変わったのかな?と過去のページ構造に思いを馳せていましたが、結果としてはページ構造は何も変わっておらず、実はリクエストが失敗していたという状況でした。
原因特定に時間がかかってしまった要因の一つとして、requestsの仕様を知らなかったことが挙げられるため備忘録としてまとめておきます。

※ 最終的な原因はサイトのURLが一部変わっていたことでした。

httpレスポンスについて

httpレスポンスはステータス行、ヘッダー、本体(ボディ)の3つに分かれています。

このときステータスコードはヘッダーの1行目にあります。
私はこのステータスコードだけを見て「リクエストは正しく通っている」と判断をしてしまいました。

HTTP/1.1 200 OK

requestsの仕様

httpリクエストを送り、responseを受け取るためのコードはざっくり以下のようになっています。

session = requests.session()
url = "~~~"
response = session.get(url)

このとき、session.getではallow_redirects=Trueがデフォルトとなっており、このオプションがTrueだと300番台のステータスコードが返ってきた際に、自動でリダイレクトを行います。

そのため、response.status_codeだけ確認してしまうと、リクエストが正しく処理されていると私のように勘違いし、他のエラー要因に思いを馳せる可能性があります。
レスポンスが通っているか否かを先に把握することで原因の探索時間は大幅に減少すると思います。

まとめ

  • 自分が使っているライブラリの仕様については公式ドキュメントを確認しよう!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?