2017-01-16 80 views
1

我想读一小部分的网页。起初我认为问题是urlencode所以补充说,但问题仍然存在。无法打开流:没有这样的文件或目录与网页

该脚本从google.com等简单链接中读取的效果很好,但它不适用于我想要的链接。

<?php 
     $link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html"; 
     $newlink = urlencode($link); 

     $linkcontents = file_get_contents($newlink); 
     $needle = "Sold out"; 
     if(strpos($linkcontents, $needle) == true){ 
      echo "String found"; 
     } else{ 
      echo "String not found"; 
     } ?> 
+0

有没有必要使用'urlencode' –

+0

是的,我也这么认为,但它仍然带来了一个不同的错误。 “未能打开流:HTTP请求失败!HTTP/1.0 403禁止在” – bsaid97

回答

2

林改变了我的答案,因为我这样做下面的代码:

$link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html"; 

// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, $link); 

// $output contains the output string 
$output = curl_exec($ch); 

die(var_dump($output)); 

,它给了我这个响应

对不起,你已经被封锁

您无法访问本网站

我为什么被封锁?

本网站使用安全服务来保护自己免受在线 攻击。您刚刚执行的操作触发了安全性 解决方案。有几个动作可能会触发此块 ,包括提交某个单词或短语,SQL命令或不正确的数据。

我该怎么做才能解决这个问题?

如果你是一个个人的连接上,像在家里一样,你可以在你的设备上运行的 反病毒扫描,以确保它不会感染 恶意软件。

如果您位于办公室或共享网络,则可以要求网络管理员 在整个网络上运行扫描,以寻找 错误配置或受感染的设备。

HTTP 403 - 禁止“

看来你是无法做到的阿迪达斯网站上的任何webscraping

+0

谢谢!我以前从未使用cURL,因此我需要使用它。不管怎么说,多谢拉! – bsaid97

+0

@ bsaid97没问题,如果你真的需要使用addidas网站,我认为你可以通过他们的API访问你的信息:https://developers.adidas.com/ |如果你以前从未使用API​​,可能会有点困惑,但只要进行一点研究,我一定会好起来的! –

0

你不需要urlencode

你正在尝试将网站。访问回应403 Forbidden

file_get_contents(http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden 

这是因为file_get_contents不会从网站的角度发送正确形成的请求。

您应该使用卷曲或其他请求工具,如狂饮,并发送由您要刮网站了解正确格式的请求(例如:狂饮默认会发一些标题所以应该工作)。

0

很可能远程主机正在过滤掉没有有效头信息的连​​接(例如,像用户代理)。

你可以欺骗它通过创建一个stream context(通常最好使用卷曲这些东西):

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" . 
       "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2228.0 Safari/537.36\r\n" 
) 
); 

$ctx = stream_context_create($opts); 

$content = file_get_contents($url,false,$ctx); 

免责声明:虽然这可能在返回HTML工作,事实证明远程主机把这些检查在适当的位置可能表明这样做会违反其使用条款。如果你的知识产权被列入黑名单,不要责怪我。

相关问题