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

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

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

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

HTTPS

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

HttpWebRequest

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

HTTPヘッダー

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

PHP

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

Q&A

解決済

3回答

3693閲覧

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

KaZu2go

総合スコア7

HTTP

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

HTTPS

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

HttpWebRequest

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

HTTPヘッダー

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

PHP

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

0グッド

0クリップ

投稿2017/12/05 04:22

編集2017/12/05 06:05

メル/カリの商品ページを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);

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

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

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

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

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

KaZu2go

2017/12/05 04:34

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

回答3

0

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

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

禁止されている行為より)

投稿2017/12/05 04:28

maisumakun

総合スコア145121

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

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

KaZu2go

2017/12/05 04:36

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

2017/12/05 04:38

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

2017/12/05 04:45

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

2017/12/05 05:44

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

0

ベストアンサー

Accept-Encodingを設定すると取得できます。
identity(圧縮なし)だと取得できないようです。

php

1<?php 2//取得先 3$mel_url = "https://item.mercari.com/jp/m81656320884/"; 4 5$agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"; 6$header = array( 7 'Accept-Encoding: deflate', 8 'Accept-Language: ja,en-US;q=0.9,en;q=0.8', 9); 10$conn = curl_init(); 11curl_setopt($conn, CURLOPT_URL, $mel_url); 12curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); 13curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false); 14curl_setopt($conn, CURLOPT_USERAGENT, $agent); 15curl_setopt($conn, CURLOPT_HTTPHEADER, $header); 16//curl7.10以上であればCURLOPT_ENCODINGが使えます 17/* 18http://php.net/manual/ja/function.curl-setopt.php 19"Accept-Encoding: " ヘッダの内容。 これにより、応答のデコードを可能にします。サポートされる エンコーディングは "identity"、 "deflate" および "gzip" です。もし空文字列 "" が指定された場合、 サポートされるエンコーディングをすべて含むヘッダが送信されます。 20*/ 21//curl_setopt($conn,CURLOPT_ENCODING,''); 22 23$res = curl_exec($conn); 24var_dump($res); 25curl_close($conn);

但し、User-Agent偽装することはあまり好ましくありません。
GoogleクローラのUser-Agentを参考にしてください。
https://support.google.com/webmasters/answer/1061943?hl=ja

また、クローリングの間隔は最低1秒は空けるようにしてください

投稿2017/12/05 05:56

39ff

総合スコア284

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

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

KaZu2go

2017/12/05 09:32

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

0

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

投稿2017/12/05 04:38

yambejp

総合スコア114583

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問