卷曲不在某些网络上工作

时间:2014-09-12 06:07:26

标签: php curl

我似乎面临着一个奇怪的问题。我有一个笔记本电脑的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

1 个答案:

答案 0 :(得分:0)

在考虑完之后我认为这是你应该做的:

  1. 确保您可以从PHP连接到该站点:

    <?php $urlNoHttp = 'www.example.com'; // try 'example.com', too $hostIP = gethostbyname($urlNoHttp); var_dump($hostIP);

  2. 如果没有获得IP ,则表示存在连接问题,请继续执行第2点。

    否则 - 这不是网络问题,它是卷曲设置本身 - 尝试点3及其后续。

    1. 尝试从命令行ping ping / wget'ting目的地(ping www.example.com)。如果您得到回复 - 您的主机可以访问您的主机而不是PHP,那么

    2. 如果您获得了IP - 那么请尝试阅读 curl_setopt() int PHP docs 。我首先设置正确的HTTP标头(如Content-type,User-Agent,非空体到请求等)。另外,请尝试添加强制不使用网址缓存版本的curl_setopt($c, CURLOPT_FRESH_CONNECT, 1);

    3. 如果它仍然不起作用 - 尝试混合使用某些代理选项,例如curl_setopt($c, CURLOPT_HTTPPROXYTUNNEL, TRUE);来强制代理的“透明”,如果有的话。
    4. 通常,您必须弄清楚切换网络环境时会发生什么变化。您必须知道是否涉及任何代理,一些奇怪的NAT系统或者您的路由器的防火墙有一些奇怪的设置,假设这种请求不安全并阻止它。

      希望这有帮助。