我试图获取博客的源代码。
如果我尝试从PHP或从命令行没关系。 两个超时。 还尝试过get_file_contents(),但同样的问题
当我尝试这个命令:
curl http://blogg.se -m 5 --verbose
我得到这个:
* About to connect() to blogg.se port 80 (#0) * Trying 82.96.60.8... connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: blogg.se > Accept: */* > * Operation timed out after 5001 milliseconds with 0 bytes received * Closing connection #0 curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received
* About to connect() to blogg.se port 80 (#0) * Trying 82.96.60.8... connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: blogg.se > Accept: */* > * Operation timed out after 5001 milliseconds with 0 bytes received * Closing connection #0 curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received
但是,如果我尝试与另一个url:
curl http://ip.nu -m 5 --verbose
它的工作完美。
我想我可能会被禁止,但我也尝试使用curl与代理,仍然超时。
我可以ping通blogg.se,没有任何问题。
我也正在改变php脚本中的用户代理。
这是我的PHP
$url = "http://blogg.se/"; $curl = curl_init(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_VERBOSE, TRUE); curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1); curl_setopt($curl, CURLOPT_MAXREDIRS,50); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $info = curl_getinfo($ch); $html = curl_exec($curl); if (!$html) { echo "cURL error number:" .curl_errno($curl); echo "cURL error:" . curl_error($curl); exit; } curl_close($curl); echo $html;
$url = "http://blogg.se/"; $curl = curl_init(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_VERBOSE, TRUE); curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1); curl_setopt($curl, CURLOPT_MAXREDIRS,50); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $info = curl_getinfo($ch); $html = curl_exec($curl); if (!$html) { echo "cURL error number:" .curl_errno($curl); echo "cURL error:" . curl_error($curl); exit; } curl_close($curl); echo $html;
在这台服务器上,我用nginx,php-fpm和varnish运行一个ubuntu
PHP版本5.3.10-1ubuntu3.5 – cURL版本7.22.0
它正在工作(从上面的url)在微型实例上,我有亚马逊几乎相同的configuration – 除了版本。
PHP版本5.3.6-13ubuntu3.9 – cURL版本7.21.6
它也使用相同的PHP脚本从本地主机上的Windows / Apache的工作。
–
我已经尝试cookiejar和cookiefile,但由于即时通讯没有得到一个响应我也没有得到cookies。 也尝试将CURLOPT_SSL_VERIFYPEER设置为false。
还有什么我可以尝试?
–
更新1
刚刚注意到我不能ping我的新服务器,但我可以ping亚马逊一个。
所以我禁用了ufw防火墙,然后通过ping得到响应,但是curl仍然没有工作。
由于远程HTTP服务器在请求的超时期限内没有发送回应,所以会发生超时。 这真的很简单。 它实际上甚至不会在这5秒内发送一个字节,正如错误信息所告知的那样。
您可以ping通它是完全不相关的,因为ping是一个ICMP消息,与来自站点的Web服务器的HTTP响应非常不同。
现在,你当然会问, 为什么服务器不能响应你的请求,而这并不容易知道。 这可能是简单的,因为服务器忽略了你,因为你以前有过失误,它可能会很慢,或者可能是其他几个原因之一…