例如,使用此代码:
$curl = curl_init();
curl_setopt_array( $curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => "$url" ) );
curl_exec( $curl );
$header = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );
$url = "http://upenn.edu"
将不工作,而$url = "http://www.upenn.edu"
将有效。
如果没有www.
我得到的回复代码为0
,而www.
则为200
。
如果我使用PHP get_headers("http://upenn.edu")
,我会收到两个错误:
Warning: get_headers() [function.get-headers]: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
和
Warning: get_headers(http://upenn.edu) [function.get-headers]: failed to open stream: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
但是,当我使用完全相同的代码时,http://google.com
将工作(以及预期的http://www.google.com
。)
然后,对于http://www.dogpile.com
这样的网站,包含的www.
部分会返回响应代码0
,而不会 www.
,我得到302
。
这是为什么?是否有更好的方法来确保可靠的结果(即,www.
不存在,但仍然返回响应代码?)
我是新手使用cURL并处理标题和响应代码,所以任何帮助都表示赞赏。谢谢。
答案 0 :(得分:4)
并非所有域都同等对待www.domain.com
和domain.com
。 通常他们会这样做,但是如果你愿意,你可以拥有两个完全不同的网站。
就个人而言,我希望将www.mydomains.com
的所有请求重定向到无www版本,但这只是我的偏好。
没有可行的方法来自动检测是否使用www.
答案 1 :(得分:3)
你的问题,甚至因为现在使用卷曲而被问到,实际上是完全独立于卷曲的东西。其他客户端http库与这些示例相同,因为它与域名系统和计算机上运行的服务有关。
Curl是一个HTTP库。如果您执行HTTP请求,默认情况下您将尝试连接到远程计算机上的端口80.
远程计算机由IP地址标识。这是一个像173.194.35.134
这样的数字 - 你可能已经知道了。
通常不使用数字,而是使用某些域名,例如google.com
173.194.35.134
。
告诉curl使用URI http://google.com/
将打开与
173.194.35.134:80
域名系统会将域google.com
解析为IP地址。
域名可以按级别组织。每个级别用点.
分隔。对于google.com
com
,所谓的顶级域名(TLD)是右侧最重要的部分。二级域(SLD)分别为google
。使用www.google.com
,您有另一个域名,然后有三个级别。 www
通常称为子域。
这里最重要的部分是,对于每个不同的域,DNS系统都可以返回不同的IP地址。
因此www.google.com
和google.com
可能是两个完全不同的东西。 www
子域只是在使用SLD.TLD
组织的网络上命名网络服务器的常用约定。
因此,通过这种方式,您可以尝试两者并查看哪一个有效。但是,我不会尝试使用和{/ 1}}。
答案 2 :(得分:1)
$ dig upenn.edu
; <<>> DiG 9.8.3-P1 <<>> upenn.edu
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54604
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;upenn.edu. IN A
;; Query time: 2 msec
;; SERVER: 10.0.1.1#53(10.0.1.1)
;; WHEN: Tue Dec 18 17:37:18 2012
;; MSG SIZE rcvd: 27
$ dig www.upenn.edu
; <<>> DiG 9.8.3-P1 <<>> www.upenn.edu
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10583
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.upenn.edu. IN A
;; ANSWER SECTION:
www.upenn.edu. 123 IN CNAME www.upenn.edu-dscg.edgesuite.net.
www.upenn.edu-dscg.edgesuite.net. 4782 IN CNAME a1165.dscg.akamai.net.
a1165.dscg.akamai.net. 4 IN A 208.47.254.80
a1165.dscg.akamai.net. 4 IN A 208.47.254.83
;; Query time: 2 msec
;; SERVER: 10.0.1.1#53(10.0.1.1)
;; WHEN: Tue Dec 18 17:37:23 2012
;; MSG SIZE rcvd: 141
宾夕法尼亚大学忽略了为其域名的非www变体设置DNS记录。奇怪的是他们已经这样做了(并且可能与他们的CDN设置有关,它依赖于CNAME,你可以为域的根级别拥有它。)
与cURL无关,只是upenn.edu的DNS设置。