我一直在尝试使用PHP从链接获取Web内容。我尝试过使用file_get_contents()
和curl,但两者都没有使用我想要的链接。我的curl
代码如下:
function request($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
echo request("http://...");
此代码打印的内容类似于“”
此代码适用于Google等网站,但无法使用我想要的网址。但是,当我使用curl
终端命令尝试它时,它可以在那里工作。可能是什么问题?
以下是curl -I
输出:
HTTP/1.1 200 OK
Date: Mon, 09 Jun 2014 23:47:43 GMT
Server: Apache
Set-Cookie: PHPSESSID=m7fs1ikt47epgoiekg68nnq064; path=/; domain=.sozlukspot.com
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Powered-By: PleskLin
Connection: close
Content-Type: text/html
答案 0 :(得分:1)
试试这个。我使用一组标准的curl
选项重新设计了您的功能,我将其设置为从远程URL获取内容。我相信它应该有用。
我认为问题是您尝试连接的网站拒绝来自没有正确用户代理集的Web请求的连接,是纯curl
请求还是只有一个空白用户代理。因此,在CURLOPT_USERAGENT
中设置curl
应该有效。我在这里设置了一个相当通用的Mozilla/5.0
设置,但是将其更改为您认为需要设置的其他代理。
function request($url){
// The actual curl request.
$curl_timeout = 5;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $curl_timeout);
curl_setopt($curl, 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');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
echo request("http://...");
答案 1 :(得分:0)
您正在访问的网站正在返回BOM标记。这通常表示字符编码采用UNICODE格式。尝试将函数的最后一行更改为:
return utf8_decode($res);