我似乎面临着一个奇怪的问题。我有一个笔记本电脑的PHP脚本(在wamp下运行),它使用'curl'并且在工作中完美地工作。但是当在家里并连接到我的ISP时,同样如此 脚本无法返回任何数据。即使像下面的示例代码也会失败:
$ch = curl_init("http://www.yahoo.com/");
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch));
curl_getinfo dows没有提供进一步调试的任何线索。 HTTP CODE为零。我是否需要添加任何标题>
我可以通过浏览器访问example.com,所以我猜没有网络问题。 curl_err和curl_errno为空。
<pre>
array (size=22)
'url' => string 'http://www.example.com/' (length=23)
'content_type' => null
'http_code' => int 0
'header_size' => int 0
'request_size' => int 0
'filetime' => int -1
'ssl_verify_result' => int 0
'redirect_count' => int 0
'total_time' => float 0
'namelookup_time' => float 0
'connect_time' => float 0
'pretransfer_time' => float 0
'size_upload' => float 0
'size_download' => float 0
'speed_download' => float 0
'speed_upload' => float 0
'download_content_length' => float -1
'upload_content_length' => float -1
'starttransfer_time' => float 0
'redirect_time' => float 0
'certinfo' =>
array (size=0)
empty
'redirect_url' => string '' (length=0)
</pre>
null
null
答案 0 :(得分:0)
在考虑完之后我认为这是你应该做的:
确保您可以从PHP连接到该站点:
<?php
$urlNoHttp = 'www.example.com'; // try 'example.com', too
$hostIP = gethostbyname($urlNoHttp);
var_dump($hostIP);
如果没有获得IP ,则表示存在连接问题,请继续执行第2点。
否则 - 这不是网络问题,它是卷曲设置本身 - 尝试点3及其后续。
尝试从命令行ping ping / wget'ting目的地(ping www.example.com)。如果您得到回复 - 您的主机可以访问您的主机而不是PHP,那么
如果您获得了IP - 那么请尝试阅读 curl_setopt() int PHP docs 。我首先设置正确的HTTP标头(如Content-type,User-Agent,非空体到请求等)。另外,请尝试添加强制不使用网址缓存版本的curl_setopt($c, CURLOPT_FRESH_CONNECT, 1);
。
curl_setopt($c, CURLOPT_HTTPPROXYTUNNEL, TRUE);
来强制代理的“透明”,如果有的话。通常,您必须弄清楚切换网络环境时会发生什么变化。您必须知道是否涉及任何代理,一些奇怪的NAT系统或者您的路由器的防火墙有一些奇怪的设置,假设这种请求不安全并阻止它。
希望这有帮助。