curl url(custum port) html grab show blank on live site php


curl url(custum port) html grab show blank on live site php

我想使用自定义端口(而不是 8080)获取 URL 的 html,即 abc.com:1234 但它在实时服务器上显示为空白,但在本地主机上工作正常

我的代码:

     <?php ini_set("display_errors",1); error_reporting(E_ALL);
                        ini_set('allow_url_fopen', true); ini_set('allow_url_include', true); ini_set('allow_url_include', 'on'); ?> 
                    <?php 
 //getSslPage("http://portquiz.net:8080"); 
         getSslPage("http://portquiz.net:666");         
                function getSslPage($url) { 
         $curl_connection =   curl_init($url); 
        //set options ///
        curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 3990);
                        curl_setopt($curl_connection, CURLOPT_USERAGENT,   "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
                        curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array(
                             'Content-Type: text/xml',
                            'Connection: Keep-Alive',
                            'Keep-Alive: 300' ));
                        curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl_connection,CURLOPT_SSL_VERIFYHOST,0); 
    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($curl_connection, CURLOPT_TIMEOUT, 20); //old value 15 
            //set data to be posted 
            //curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 
            //perform our request  
            $result = curl_exec($curl_connection);  
            echo "<h1 style=color:blue>Output Result:</h1><br>"; 
             echo htmlentities($result);  
             echo "<h1 style=color:blue>|Curl Exec Detail:</h1><br>"; 
             //var_dump($result); 
             echo "<pre>";
             print_r(curl_getinfo($curl_connection));   
            echo "</pre>";  
             echo curl_errno($curl_connection) . '<br/>';
             echo curl_error($curl_connection) . '<br/>';


                        } exit; ?>

本地主机上的输出:

Output Result:
<html> <head> <title>Outgoing Port Tester</title> <style type="text/css"> body { font-family: sans-serif; font-size: 0.9em; } </style> </head> <body> <h1>Outgoing port tester</h1> This server listens on all TCP ports, allowing you to test any outbound TCP port. <p> You have reached this page on port <b>666</b>.<br/> </p> Your network allows you to use this port. (Assuming that your network is not doing advanced traffic filtering.) <p> Network service: unknown<br/> Your outgoing IP: 39.32.94.166</p> <h2>Test a port using a command</h2> <pre> $ telnet portquiz.net 666 Trying ... Connected to portquiz.net. Escape character is '^]'. </pre> <pre> $ nc -v portquiz.net 666 Connection to portquiz.net 666 port [tcp/daytime] succeeded! </pre> <pre> $ curl portquiz.net:666 Port 666 test successful! Your IP: 39.32.94.166</pre> <pre> $ wget -qO- portquiz.net:666 Port 666 test successful! Your IP: 39.32.94.166</pre> <pre> # For Windows PowerShell users PS C:'&gt; Test-NetConnection -InformationLevel detailed -ComputerName portquiz.net -Port 666</pre> <h2>Test a port using your browser</h2> <p> In your browser address bar: <strong>http://portquiz.net:XXXX</strong> </p> Examples: <br/> <a href="http://portquiz.net:8080">http://portquiz.net:8080</a> <br/> <a href="http://portquiz.net:8">http://portquiz.net:8</a> <br/> <a href="http://portquiz.net:666">http://portquiz.net:666</a> <br/> <p> I got complains that portquiz is not working on port 445. My hosting company OVH is probably blocking this port. Sorry about that. Feel free to contact them. See <a href="http://positon.org/is-ovh-blocking-port-445">my blog post</a> and <a href="https://forum.ovh.com/showthread.php/106901-OVH-bloque-le-port-445-vers-mon-serveur-d%C3%A9di%C3%A9">OVH forum post (french)</a>. </p> <p> Your browser can block network ports normally used for purposes other than Web browsing. In this case you should use the telnet or netcat commands to test the port. </p> <p> Please also note that this server uses some port for real services (22, 25), so testing with your browser on those ports will not work. </p> <p> <i>Contact/feedback:</i><br/> <img src="portquizm.png" /> </p> <p> <i>See also:</i><br/> <ul> <li> <a href="http://en.positon.org/post/An-outgoing-port-tester">Blog post on this topic</a> and <a href="http://positon.org/portquiz-net-how-it-works">How it works</a> </li> <li> <a href="http://www.firebind.com/">Firebind</a>, a commercial tester. <a href="http://www.firebind.com/clients/web/">javascript test</a> </li> <li> <a href="https://github.com/nhooyr/outPorts">outPorts</a>, a tiny program to test a range of ports using portquiz </li> </ul> </p> </body> </html>
|Curl Exec Detail:
Array
(
    [url] => http://portquiz.net:666/
    [content_type] => text/html
    [http_code] => 200
    [header_size] => 233
    [request_size] => 184
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.5
    [namelookup_time] => 0
    [connect_time] => 0.234
    [pretransfer_time] => 0.234
    [size_upload] => 0
    [size_download] => 2694
    [speed_download] => 5388
    [speed_upload] => 0
    [download_content_length] => 2694
    [upload_content_length] => 0
    [starttransfer_time] => 0.5
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 178.33.250.62
    [certinfo] => Array
        (
        )
    [primary_port] => 666
    [local_ip] => 192.168.1.47
    [local_port] => 54754
)
0

实时站点上的输出:(结果显示空白/空)

Output Result:
|Curl Exec Detail:
Array
(
    [url] => http://portquiz.net:666/
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 19.340628
    [namelookup_time] => 0.117558
    [connect_time] => 0
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 
    [certinfo] => Array
        (
        )
    [primary_port] => 0
    [local_ip] => 
    [local_port] => 0
)
28
Connection timed out after 20001 milliseconds

请帮助我,我正在从最近 2 天开始工作,但没有成功,谢谢

在您上面发布的示例中,我没有看到curl_exec,所以我添加了它。

这对我有用:

<?php ini_set("display_errors", 1);
error_reporting(E_ALL);
ini_set('allow_url_fopen', true);
ini_set('allow_url_include', true);
ini_set('allow_url_include', 'on');
?>
<?php
//getSslPage("http://portquiz.net:8"); 
function getSslPage($url) {
    $curl_connection = curl_init($url); //set options ///curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 3990);
    curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array(
        'Content-Type: text/xml',
        'Connection: Keep-Alive',
        'Keep-Alive: 300'));
    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl_connection, CURLOPT_TIMEOUT, 20); //old value 15 //set data to be posted //curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); //perform our request  $result = curl_exec($curl_connection);  echo "<h1 style=color:blue>Output Result:</h1><br>";  echo htmlentities($result);   echo "<h1 style=color:blue>|Curl Exec Detail:</h1><br>";  //var_dump($result);  echo "<pre>";
    echo "</pre>";
    echo curl_errno($curl_connection) . '<br/>';
    echo curl_error($curl_connection) . '<br/>';
    print_r(curl_exec($curl_connection));
    print_r(curl_getinfo($curl_connection));
}
getSslPage("http://portquiz.net:666");

结果:

</pre>0<br/><br/>
<html>
<head>
<title>Outgoing Port Tester</title>
<style type="text/css">
body {
    font-family: sans-serif;
    font-size: 0.9em;
}
</style>
</head>
<body>
<h1>Outgoing port tester</h1>
This server listens on all TCP ports, allowing you to test any outbound TCP port.
<p>
You have reached this page on port <b>666</b>.<br/>
</p>
Your network allows you to use this port.
(Assuming that your network is not doing advanced traffic filtering.)
<p>
Network service: unknown<br/>
Your outgoing IP: 131.228.182.254</p>
<h2>Test a port using a command</h2>
<pre>
$ telnet portquiz.net 666 
Trying ...
Connected to portquiz.net.
Escape character is '^]'.
</pre>
<pre>
$ nc -v portquiz.net 666 
Connection to portquiz.net 666 port [tcp/daytime] succeeded!
</pre>
<pre>
$ curl portquiz.net:666 
Port 666 test successful!
Your IP: 131.228.182.254</pre>
<pre>
$ wget -qO- portquiz.net:666 
Port 666 test successful!
Your IP: 131.228.182.254</pre>
<pre>
# For Windows PowerShell users
PS C:'&gt; Test-NetConnection -InformationLevel detailed -ComputerName portquiz.net -Port 666</pre>
<h2>Test a port using your browser</h2>
<p>
In your browser address bar: <strong>http://portquiz.net:XXXX</strong>
</p>
Examples: <br/>
<a href="http://portquiz.net:8080">http://portquiz.net:8080</a> <br/>
<a href="http://portquiz.net:8">http://portquiz.net:8</a> <br/>
<a href="http://portquiz.net:666">http://portquiz.net:666</a> <br/>
<p>
I got complains that portquiz is not working on port 445. My hosting company OVH is probably blocking this port. Sorry about that. Feel free to contact them. See <a href="http://positon.org/is-ovh-blocking-port-445">my blog post</a> and <a href="https://forum.ovh.com/showthread.php/106901-OVH-bloque-le-port-445-vers-mon-serveur-d%C3%A9di%C3%A9">OVH forum post (french)</a>.
</p>
<p>
Your browser can block network ports normally used for purposes other than Web browsing. In this case you should use the telnet or netcat commands to test the port.
</p>
<p>
Please also note that this server uses some port for real services (22, 25), so testing with your browser on those ports will not work.
</p>

<p>
<i>Contact/feedback:</i><br/>
<img src="portquizm.png" />
</p>
<p>
<i>See also:</i><br/>
<ul>
<li> <a href="http://en.positon.org/post/An-outgoing-port-tester">Blog post on this topic</a> and <a href="http://positon.org/portquiz-net-how-it-works">How it works</a> </li>
<li> <a href="http://www.firebind.com/">Firebind</a>, a commercial tester. <a href="http://www.firebind.com/clients/web/">javascript test</a> </li>
<li> <a href="https://github.com/nhooyr/outPorts">outPorts</a>, a tiny program to test a range of ports using portquiz </li>
</ul>
</p>
</body>
</html>
Array
(
    [url] => http://portquiz.net:666/
    [content_type] => text/html
    [http_code] => 200
    [header_size] => 233
    [request_size] => 184
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.054183
    [namelookup_time] => 0.004118
    [connect_time] => 0.024217
    [pretransfer_time] => 0.024252
    [size_upload] => 0
    [size_download] => 2703
    [speed_download] => 49886
    [speed_upload] => 0
    [download_content_length] => 2703
    [upload_content_length] => -1
    [starttransfer_time] => 0.053941
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 178.33.250.62
    [certinfo] => Array
    (
    )
    [primary_port] => 666
    [local_ip] => 10.223.128.174
    [local_port] => 36696
)

代码对我来说似乎很好,作为一种解决方法,请尝试更改:

curl_setopt ( $curl_connection, CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $curl_connection, CURLOPT_RETURNTRANSFER, 1 );

如 curl-exec PHP 手册页的返回值部分所述:http://php.net/manual/function.curl-exec.php

您应该为重定向启用CURLOPT_FOLLOWLOCATION选项,但如果您的服务器处于safe_mode和/或open_basedir有效,这将是一个问题,这也可能导致 curl 问题。

这里

的重要信息是:

连接在 20001 毫秒后超时

这意味着您的连接未通过该主机。原因可能是防火墙或网络配置错误在两端 - 您的服务器或远程服务器。

我想到的第一件事是低于 666 的端口号 (1024)。在 Unix 系统上,只有特权用户才能侦听这些端口。因此,如果您使用的是普通用户,则可能无法收听。

但是,如果您能够从本地计算机连接到它,则问题可能出在您的服务器上。为了检查它是否配置为将连接传递到任何端口,您可以在终端中尝试以下简单命令:

$ telnet portquiz.net 666
Trying 178.33.250.62...
Connected to portquiz.net.
Escape character is '^]'.
GET /

GET / HTTP 请求,您需要在收到提示时从键盘输入。如果未收到提示,并且在一段时间后收到超时消息 - 则主机配置为不将连接传递到自定义端口。这通常是共享主机的问题。

在这种情况下,您应该执行以下操作之一:

  • 重新配置主机以允许此类连接
  • 使用一些标准端口:80、8080、443 等
  • 将您的托管服务提供商切换到没有此类限制的提供商。

编辑:您也可以从PHP脚本中进行简单的检查:

$fp = fsockopen("portquiz.net", 666);
var_dump($fp);

如果var_dump的结果false或者您执行该页面超时 - 原因是您的主机上不允许连接到随机端口。

请注意,PHP 中的curl_*函数都是 curl 程序的包装器。

这意味着您可以通过命令行尝试同样的事情。

如果您可以通过SSH或Telnet连接实时服务器,

尝试curl http://portquiz.net:666 -v,看看真正的问题是什么。

您是否注意到此错误"连接在 20001 毫秒后超时"

在此处增加连接超时时间,添加足够的时间而不是 20

curl_setopt($curl_connection, CURLOPT_TIMEOUT, 20);