質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

755閲覧

Pythonのrequestsで403エラーが返ってくる

Tallind

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/06/19 02:33

編集2024/06/19 12:25

実現したいこと

Pythonのrequestsを行うだけのプログラムです。
ローカル上のubuntuとAWS上のubuntuから全く同じプログラムを動かした場合でも、ローカルは正常にステータス200が返ってきますが、AWSは403エラーが返ってきます。
これが起きる原因はIPアドレスの違い以外になにかありますか?

(どこのサイトにアクセスしているかは明かせないため一部省略しています)

発生している問題・エラーメッセージ

Status Code: 403

該当のソースコード

Python3

1import requests 2 3headers = { 4 'accept': 'application/json, text/plain, */*', 5 'accept-language': 'en-US,en;q=0.9', 6 'content-type': 'application/json', 7 'dpop': '省略', 8 'origin': '省略, 9 'priority': 'u=1, i', 10 'referer': '省略', 11 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"', 12 'sec-ch-ua-mobile': '?0', 13 'sec-ch-ua-platform': '"Linux"', 14 'sec-fetch-dest': 'empty', 15 'sec-fetch-mode': 'cors', 16 'sec-fetch-site': 'cross-site', 17 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 18 'x-country-code': 'JP', 19 'x-platform': 'web', 20} 21 22json_data = { 23#省略 24} 25 26response = requests.post('URL', headers=headers, json=json_data) 27 28print("Status Code:", response.status_code)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

これが起きる原因はIPアドレスの違い以外になにかありますか?

状況が不明なので、なんとも言えないところです。IPアドレスやそれの逆引き結果のホスト名の違いで、サーバー側のプログラムの仕様によっては、チェックに引っかかって権限無しの結果となることはあり得ます。

HTTP接続であれば、各OSからのリクエストのTCPレベルの通信のトレースを取って、クライアントIPアドレスとクライアントポート番号以外のリクエスト内容が完全一致なら、IPアドレスが原因でしょう。
それ以外のHTTPヘッダに違いがあればそれが原因の可能性もありますが、OS/Python/requestsライブラリのバージョンが全て同じなら多分違いは出ない。HTTPS接続だとトレース時に暗号を解かないといけないので、URLを本物でなく自作CGIのURLに接続して、自作CGI側でリクエスト内容を返送して確認するのが楽です。あるいはTCPトレースの取り方が分からなければHTTPの場合も。
他には、片方だけProxyサーバー経由だったり、別々のProxyサーバー経由だったりすると、その影響である可能性もゼロでは無いです。

あと書かれているコードだとHTTPステータスコードしか見てないようなのですが、response.headersresponse.textは見てないのでしょうか?エラーの原因が書いてある可能性もあります。

自作CGIの例:
env sort catコマンドのパスが通っているかは要確認。
envの出力結果で、何がクライアント由来で何がサーバーの情報かは意識して見ましょう。

Sh

1#!/bin/sh 2echo "Content-Type: text/plain 3" 4env | sort 5echo ========== 6cat -n 7echo ==========

投稿2024/06/20 08:13

otn

総合スコア86293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ローカルとAWSで反応が違うなら、おそらくIPアドレスの違いです。
実際はIPアドレス決め打ちではなく、amazonaws.com指定でdenyしているはずです。
python-requests指定でdenyしているなら、ローカルもAWSも403になります。

投稿2024/06/19 12:53

hiroki-o

総合スコア1361

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問