php curl无法正常工作

时间:2014-06-09 23:41:21

标签: php curl file-get-contents

我一直在尝试使用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

2 个答案:

答案 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);