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

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

新規登録して質問してみよう
ただいま回答率
85.50%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

4回答

3578閲覧

ローカルのPythonからrequests でHttpリクエスト行うと200が返ってくるのに、リモートで同じコードを実行すると403が返ってくるサイトについて

katsuwo-kun

総合スコア10

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/02/25 12:30

前提・実現したいこと

何が要因か知りたい

エラーメッセージ

<Response [403]>

該当のソースコード

headers={'Connection': 'keep-alive',
'Accept-Encoding': 'gzip, deflate',
'Accept': '/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}

requests.get('https://www.mercari.com/jp/', headers=headers)

試したこと

ローカルPC(windows)のanaconda Qt Console から上記リクエストをかけると<Response [200]>で通ります
しかしながら、リモートのサーバーから上記コードを実行すると<Response [403]>で返ってきます
ちなみにPython自体はあまり関係なくPHPでも似たようなコードを書いてみましたが、リモートでは403
ローカルPCのコマンドラインからcurlを叩いてみたところ、きっちりレスポンスが返ってきますが、リモートからのcurlは403で弾かれます

試したリモートサーバーがAWSオハイオリージョンのLinuxからだったのでIPやLocation?の様なもので弾かれているのかと思い、
国内で借りている別のサーバーで同じコードを実行、curlも試してみましたが403

torブラウザを使ってIPを海外のものに変えてみてもブラウザ越しであれば問題なく表示されます。
かといってAWSのリモートからselenium & Chromeのヘッドレスでアクセスを試みるも403・・・

httpリクエストに関して、それほど深い造詣もないため、何が原因で弾かれているのか皆目見当もつかず、
お知恵を拝借したく投稿させていただきました。

補足情報(FW/ツールのバージョンなど)

全て200で通った:
ローカルで試した環境はwin10の標準コマンドプロンプトからのcurl、Anaconda Qtからの上記pythonスクリプト

全て403で通らず:
リモート/AWSのオハイオ/Cloud9からの上記pythonスクリプトと別途作成のPHP、Linux bashからのcurlコマンド
リモート/coreserver(国内)のLinuxから上記pythonスクリプト curl

ちなみにローカルではUAだけ偽装すれば200が返ってきます。UA付加なしだと403。

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

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

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

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

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

guest

回答4

0

mercari が BOT 対策してるだけでは?

投稿2019/02/25 12:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

katsuwo-kun

2019/02/25 12:38

BOT対策していることはもちろん分かるのですが、ローカルでリクエストが通って、リモートで通らないという点を追及しています。このようなサイトを他にあまり見たことがないもので・・・。
退会済みユーザー

退会済みユーザー

2019/02/25 12:43

webブラウザで正常にサイトを表示したあとにコードを動かせば 正常にレスポンスを返してくる場面もあるかもしれない。 ってところだろうかと想像してみる。 セッション管理やjavascriptなどもwebブラウザでは処理できるものの、 BOTの方はそこまでさばいてないでしょ。 サーバー側で接続元IPアドレス単位で拒否してるなら、という前提だけど。
退会済みユーザー

退会済みユーザー

2019/02/25 12:52

弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること まあ、禁止事項だから量刑をまとうか(笑)
guest

0

すでにある程度解決されているようですが一応
Conoha東京リージョンとOCP東京リージョンで試したところ、どちらも200でした
OCPにはalways freeがあるのでリモートからアクセスする必要があるのであればここを使うといいかもしれません

OCP東京リージョン

bash

1[opc@ocp ~]$ curl https://www.mercari.com/jp/ --head 2HTTP/2 200 3content-type: text/html; charset=utf-8 4set-cookie: _sfuji=1634565423.662.9176.89819; Path=/jp; Secure; HttpOnly 5set-cookie: mwfv=never; Max-Age=7200; Path=/jp; Expires=Mon, 18 Oct 2021 15:57:02 GMT; HttpOnly; Secure 6set-cookie: MJP_RSID=93d2785fd3f413e84629f2a427d0d7f3; Max-Age=315360; Path=/jp; Expires=Fri, 22 Oct 2021 05:33:02 GM 7T; HttpOnly; Secure 8set-cookie: MJP_WEB2SID=58tf9bnebpkj88sev3a41etj4c; Max-Age=315360; Path=/jp; Expires=Fri, 22 Oct 2021 05:33:02 GMT; 9HttpOnly; Secure 10x-dns-prefetch-control: off 11x-frame-options: SAMEORIGIN 12strict-transport-security: max-age=15552000; includeSubDomains 13x-download-options: noopen 14x-content-type-options: nosniff 15x-xss-protection: 1; mode=block 16etag: "227a0-3zaIx8zyz4i4a1RW00SdVY/VjO0" 17cache-control: private, no-cache, no-store, must-revalidate 18pragma: no-cache 19set-cookie: merCtx=""; HttpOnly 20accept-ranges: bytes 21date: Mon, 18 Oct 2021 13:57:03 GMT 22via: 1.1 varnish 23x-served-by: cache-tyo11937-TYO 24x-cache: MISS 25x-cache-hits: 0 26x-timer: S1634565423.661000,VS0,VE718 27vary: Accept-Encoding 28content-length: 141216

Conoha東京リージョン

bash

1[conoha@conoha ~]# curl https://www.mercari.com/jp/ --head 2HTTP/2 200 3content-type: text/html; charset=utf-8 4set-cookie: _sfuji=1634565442.579.9186.441042; Path=/jp; Secure; HttpOnly 5set-cookie: mwfv=never; Max-Age=7200; Path=/jp; Expires=Mon, 18 Oct 2021 15:57:21 GMT; HttpOnly; Secure 6set-cookie: MJP_RSID=b0158fb051580dba334e446c5ec71103; Max-Age=315360; Path=/jp; Expires=Fri, 22 Oct 2021 05:33:21 GM 7T; HttpOnly; Secure 8set-cookie: MJP_WEB2SID=7rf9pofbmg75ioev9e12tojlt5; Max-Age=315360; Path=/jp; Expires=Fri, 22 Oct 2021 05:33:21 GMT; 9HttpOnly; Secure 10x-dns-prefetch-control: off 11x-frame-options: SAMEORIGIN 12strict-transport-security: max-age=15552000; includeSubDomains 13x-download-options: noopen 14x-content-type-options: nosniff 15x-xss-protection: 1; mode=block 16etag: "22447-Xis3w26jnqdEDz60Um1A+1qIRZw" 17cache-control: private, no-cache, no-store, must-revalidate 18pragma: no-cache 19set-cookie: merCtx=""; HttpOnly 20accept-ranges: bytes 21date: Mon, 18 Oct 2021 13:57:22 GMT 22via: 1.1 varnish 23x-served-by: cache-hnd18736-HND 24x-cache: MISS 25x-cache-hits: 0 26x-timer: S1634565442.551344,VS0,VE661 27vary: Accept-Encoding 28content-length: 140359

投稿2021/10/18 14:02

__xpa__

総合スコア2

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

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

0

一応半分ですが、自己解決しました。

リモートからのアクセスが蹴られますが、TakumibooさんがおっしゃるようにIPを含めた複合的な要因で蹴られているようです。

リモートからのselenium × chromeヘッドレス × torプロキシ なら200で表示できるようです。
同じくproxyを刺したrequestsのアクセスが何故蹴られるのかは解明できていませんが、m6uさんのおっしゃるようにjs関係の仕掛け等あるのかもしれませんね。

投稿2019/02/26 01:54

katsuwo-kun

総合スコア10

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

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

Takumiboo

2019/02/26 02:00

正常に表示できるブラウザ(ローカルのPC等でも可)で送っているHTTPヘッダーをまるっと再現してみると、行けたりするかもしれないですね
guest

0

手元の環境で…

ローカルのBash on Ubuntuなcurlでhttps://www.mercari.com/jp/
→200 通常通り取得

リモート(さくらのVPS)のCentOSなcurlでhttps://www.mercari.com/jp/
→403 エラー

特定のIPアドレスなどを弾いている可能性はありそうですね。

投稿2019/02/25 12:49

Takumiboo

総合スコア2534

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

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

katsuwo-kun

2019/02/25 13:57

なるほど。ご確認いただき、ありがとうございます。 やはりリモートは通らないんですね。 今のところ自分の仮説としてはIPではないような気はしているのですが、、、どうなんでしょう。 一応理由としてはTorプロキシを使ってAWSからアクセスを試みましたが403、ローカルのPCからTorブラウザでのアクセスは問題なく通っているというのが仮説の根拠ですね・・・。
Takumiboo

2019/02/25 14:11

IPやUA、Cookieなどいろいろな要素で判定されている可能性もあるでしょうね。現にこのサイトではないですがそういったところにあたったことがあるので…
katsuwo-kun

2019/02/25 14:16

なるほど、複合的な要因ということですね。 参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問