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

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

ただいまの
回答率

91.35%

  • PHP

    15156questions

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

  • HTTP

    410questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • HTTPS

    175questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • HTTPヘッダー

    68questions

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

  • HttpWebRequest

    43questions

    HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

file_get_contentsとcURLどちらも403 Forbidden。回避策はございますか?

解決済

回答 3

投稿 2017/12/05 13:22 ・編集 2017/12/05 15:05

  • 評価
  • クリップ 0
  • VIEW 149

KaZu2go

score 1

メル/カリの商品ページを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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • x_x

    2017/12/05 13:31

    他会員の写真、文章などを無断で使用することが禁止されていますが、その辺りはクリアされているでしょうか? https://www.mercari.com/jp/help_center/getting_started/prohibited_conduct/

    キャンセル

  • KaZu2go

    2017/12/05 13:34

    自分で見る為だけの目的で作っています。宜しくお願い致します。

    キャンセル

回答 3

+8

残念ながら、それは禁止行為なので、メルカリ側で技術的にブロックしているのでしょう。

弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること メルカリでは、自動出品ツール、ならびにそれと同じとみなされるツールなどを用いての利用を禁止します。
禁止されている行為より)

投稿 2017/12/05 13:28

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/05 13:36

    ありがとうございます。自己責任である事は承知致しております。

    キャンセル

  • 2017/12/05 13:38

    承知の上ならなおのこと、全世界から見えるような場所で堂々と破り方を尋ねる、というのも適切ではないと思います。

    キャンセル

  • 2017/12/05 13:45

    一週間悩んだのですが、訊ける友達が1人もいません・・・

    キャンセル

  • 2017/12/05 14:44

    素敵なくらい会話が成り立ってないですが・・・

    キャンセル

checkベストアンサー

+1

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秒は空けるようにしてください

投稿 2017/12/05 14:56

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/05 15:05

    https://item.mercari.com/robots.txt
    を見る限り商品ページの取得は禁止されていないので問題ありません。

    キャンセル

  • 2017/12/05 18:32

    取得できました!ありがとうございます!勉強になりましたm(__)m

    キャンセル

+1

ブラウザからダイレクトにURLを打てばアクセスできるならやりようはあるでしょう
一番簡単なのはなんらかのクローラでデータを取得することだと思います
UAを偽装してるようですが、偽装が不十分なのかもしれません

投稿 2017/12/05 13:38

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • PHP

    15156questions

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

  • HTTP

    410questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • HTTPS

    175questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • HTTPヘッダー

    68questions

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

  • HttpWebRequest

    43questions

    HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。