php curl无法正常工作

php curl无法正常工作,php,curl,file-get-contents,Php,Curl,File Get Contents,我一直在尝试使用PHP从链接中获取web内容。我尝试过使用file\u get\u contents()和curl,但这两种方法都无法使用我想要的链接。我的curl代码如下: function request($url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($c

我一直在尝试使用PHP从链接中获取web内容。我尝试过使用
file\u get\u 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://...");
这段代码打印类似“ï»”的内容

这段代码适用于像谷歌这样的网站,但不适用于我想要的url。但是,当我使用
curl
terminal命令尝试它时,它可以从那里工作。有什么问题吗

以下是
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

您正在访问的站点正在返回BOM表标记。这通常表示字符编码为UNICODE格式。尝试将函数中的最后一行更改为:

return utf8_decode($res);

试试这个。我使用一组标准的
curl
选项重新编写了您的函数,这些选项是我为从远程URL获取内容而设置的。我相信它应该起作用

我认为问题在于,您试图连接的站点拒绝了来自web请求的连接,这些请求没有正确的用户代理集,是纯
curl
请求,或者只有一个空的用户代理。因此,在
curl
中设置
CURLOPT_USERAGENT
应该可以工作。我在这里将它设置为一个相当通用的
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://...");

问题URL的
curl-I
输出是什么?如果在标题中看到
content Encoding:gzip
,它可能是gzip内容。@meda我查过了,不是吗help@JakeGould将输出添加到问题中。似乎不是gzipped@OguzGelal贴出了答案。我想我的解决办法行得通。您需要设置用户代理。至于
ï»
我猜服务器配置不好&那可能是一个乱码错误消息页面的一部分。我的意思是看expires标题:
expires:Thu,1981年11月19日08:52:00GMT
那是什么?1981年到期?不管怎样,看看我的答案&看看这对你是否有效。这是个不错的主意。但包括谷歌在内的绝大多数网站都返回UTF-8内容。在这种情况下,对于来自
curl
等工具的非web浏览器请求,可能是糟糕的系统配置。这很管用!!非常感谢,先生:)