【发布时间】:2013-03-26 17:11:49
【问题描述】:
使用
$curl_handle = curl_init();
curl_setopt( $curl_handle, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt( $curl_handle, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl_handle, CURLOPT_HEADER, 1 );
curl_setopt( $curl_handle, CURLOPT_VERBOSE, 1 );
curl_setopt( $curl_handle, CURLOPT_URL, "https://www.someurl.com" );
$buffer = curl_exec( $curl_handle );
print_r( curl_getinfo ( $curl_handle ) );
我明白了
Array ( [url] => https://www.someurl.com [content_type] => [http_code] => 0
[header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0
[redirect_count] => 0 [total_time] => 10.00005 [namelookup_time] => 0.001271
[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 )
所以它似乎没有连接到服务器,但相同的代码在我的本地机器上运行良好。有什么方法可以获取更多信息吗?我的怀疑是我的虚拟主机阻止了传出连接,或者我尝试连接的服务器拒绝了连接(几个月前他们正在这样做,但我至少收到了 403 条消息,现在我'我什么也没得到)。我尝试增加超时但结果相同(响应中的超时替换为 10)。另外,namelookup_time 似乎很小,所以我想知道这是否以某种方式失败?
谢谢。
更新:我可以从我的网络服务器和本地计算机上很好地检索 google.com,所以看起来不是我的网络主机阻止了我。我已经尝试了许多代理,并且该页面是从我的本地计算机上检索的,但不是在我的网络服务器上(与我上面发布的结果相同)。我不知道如何通过 IP 连接,但 namelookup_time 比 google.com 页面要小得多。鉴于这少量的额外信息,有没有人有任何其他想法?
【问题讨论】:
-
你的机器和你的服务器有可能有不同的代理设置吗?也就是说:如果在您的机器上运行,curl 是否会从环境中获取正确的设置?
-
尝试通过一些代理请求 - 你会看到你的 IP 是否被阻止。另外,添加有效的用户代理。
-
我建议尝试获取诸如 Google.com 的首页之类的内容 - 或者您拥有的内容,然后如果这不起作用,请通过 IP 尝试以确保它不是 DNS问题。某些主机会阻止某些(或许多)传出/接收端口,因此您需要先尝试上述测试,看看您是否需要联系他们以查看它们是否存在(如果他们不允许它们,那么您需要代理)。
-
@BrianDHall 通过 IP 检查似乎是个好主意。我使用的实际 URL 格式为 someurl.com/dir/dir/file.ext?etc。原谅我的菜鸟,但我如何尝试仅通过 IP 连接到此链接?使用123.123.123.123/dir/dir/file.ext?etc 连接但仅连接到基础123.123.123.123,它似乎忽略了其余部分。
-
@GaryGarygary 我忘记了使用 IP 而不是 URL 并非易事。试试这个:stackoverflow.com/questions/6398149/curl-in-php-and-ip-address