メル/カリの商品ページをPHPで取得するソースコードを
file_get_contentsかcURLで書いたのですが
どうしても403 Forbiddenになってしまいます。
一週間前はfile_get_contentsの方で正常に取得できていましたので
何かしら拒否対策をされたのかもしれまん。
レンタルサーバーやローカルサーバなどIP変えてもダメでした。
回避できる方法に心当たりあればご教授願います。
力を貸して下さい。
個人的な情報収集が目的です。
宜しくお願い致します。
//取得先
$mel_url = "https://item.mercari.com/jp/m81656320884/";
/*
$options = array(
'http' => array(
'method' => 'GET',
// 'ignore_errors' => true,
'header' => 'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36',
),
);
$context = stream_context_create($options);
$contents = file_get_contents($mel_url, false, $context);
echo $contents;
*/
$url = $mel_url;
$agent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36";
$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, $url);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_USERAGENT, $agent);
$res = curl_exec($conn);
var_dump($res);
curl_close($conn);
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+8
残念ながら、それは禁止行為なので、メルカリ側で技術的にブロックしているのでしょう。
弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること メルカリでは、自動出品ツール、ならびにそれと同じとみなされるツールなどを用いての利用を禁止します。
(禁止されている行為より)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
ブラウザからダイレクトにURLを打てばアクセスできるならやりようはあるでしょう
一番簡単なのはなんらかのクローラでデータを取得することだと思います
UAを偽装してるようですが、偽装が不十分なのかもしれません
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
Accept-Encodingを設定すると取得できます。
identity(圧縮なし)だと取得できないようです。
<?php
//取得先
$mel_url = "https://item.mercari.com/jp/m81656320884/";
$agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36";
$header = array(
'Accept-Encoding: deflate',
'Accept-Language: ja,en-US;q=0.9,en;q=0.8',
);
$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, $mel_url);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_USERAGENT, $agent);
curl_setopt($conn, CURLOPT_HTTPHEADER, $header);
//curl7.10以上であればCURLOPT_ENCODINGが使えます
/*
http://php.net/manual/ja/function.curl-setopt.php
"Accept-Encoding: " ヘッダの内容。 これにより、応答のデコードを可能にします。サポートされる エンコーディングは "identity"、 "deflate" および "gzip" です。もし空文字列 "" が指定された場合、 サポートされるエンコーディングをすべて含むヘッダが送信されます。
*/
//curl_setopt($conn,CURLOPT_ENCODING,'');
$res = curl_exec($conn);
var_dump($res);
curl_close($conn);
但し、User-Agent偽装することはあまり好ましくありません。
GoogleクローラのUser-Agentを参考にしてください。
https://support.google.com/webmasters/answer/1061943?hl=ja
また、クローリングの間隔は最低1秒は空けるようにしてください
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
x_x
2017/12/05 13:31
他会員の写真、文章などを無断で使用することが禁止されていますが、その辺りはクリアされているでしょうか? https://www.mercari.com/jp/help_center/getting_started/prohibited_conduct/
KaZu2go
2017/12/05 13:34
自分で見る為だけの目的で作っています。宜しくお願い致します。