File_get_contents() дать мне 403 Запрещено
У меня есть партнер, который создал для меня некоторый контент.
Я могу получить доступ к странице с помощью моего браузера, но при попытке пользователя file_get_contents
я получаю 403 forbidden
.
Я пробовал использовать stream_context_create
, но это не помогло - возможно, потому, что я не знаю, что там должно быть.
1) Есть ли способ очистить данные?
2) Если нет, и если партнеру не разрешено настраивать сервер, чтобы разрешить мне доступ, что я могу сделать?
Код, который я пытался использовать:
$opts = array(
'http'=>array(
'user_agent' => 'My company name',
'method'=>"GET",
'header'=> implode("\r\n", array(
'Content-type: text/plain;'
))
)
);
$context = stream_context_create($opts);
//Get header content
$_header = file_get_contents($partner_url,false, $context);
Ответы
Ответ 1
Это не проблема в вашей script, ее функции в безопасности веб-сервера партнеров.
Трудно сказать, что именно блокирует вас, скорее всего, это своего рода блок против выскабливания. Если ваш партнер имеет доступ к настройкам своих веб-серверов, это может помочь определить.
Что вы можете сделать, это "подделать веб-браузер", установив заголовки пользовательского агента, чтобы он имитировал стандартный веб-браузер.
Я бы рекомендовал cURL сделать это, и для этого будет легко найти хорошую документацию.
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "example.com");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
Ответ 2
//сначала установить User Agent
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');
Ответ 3
У меня есть две вещи в моем сознании. Если вы открываете URI со специальными символами, например пробелами, вам нужно кодировать URI с помощью urlencode(), а URL-адрес можно использовать в качестве имени файла с помощью этой функции, если fopen wrappers включены.