1

我正在编写一个使用 PHP 5 和 cURL 从 wowarmory.com 提取 XML 数据的脚本:

$url = "http://www.wowarmory.com";
$userAgent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12';

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$url);
$str  = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$str .= "Accept-Language: en-us,en;q=0.5\r\n";
$str .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$str .= "Keep-Alive: 300\r\n";
$str .= "Connection: keep-alive\r\n";
curl_setopt($ch, CURLOPT_HTTPHEADER, array($str));
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3000);
$xml = curl_exec($ch);

当我从我的托管 Web 服务器运行它时,我得到了预期的 XML 响应。但是从我的本地主机网络服务器运行时,我什么也得不到。

我可以通过 cURL 从 localhost(yahoo.com,甚至 worldofwarcraft.com)获取任何其他网站,但不能获取 wowarmory.com。所以我知道 cURL 运行正常。

我正在使用以下版本的 PHP 和 cURL:

托管服务器:

  • php 5.2.6
  • cURL libcurl/7.16.1 OpenSSL/0.9.7e zlib/1.2.3

本地主机:

  • php 5.2.6
  • cURL libcurl/7.16.0 OpenSSL/0.9.8i zlib/1.2.3

有任何想法吗?

编辑:本地主机正在运行 Windows XP SP3。我可以通过网络浏览器访问 wowarmory.com。Tracert 在第 13 跳开始超时(显然是从我的位置开始):

13   458 ms   529 ms   549 ms  0.so-6-0-0.BR1.LAX15.ALTER.NET [152.63.116.21]
14   476 ms   510 ms   488 ms  192.205.34.29
15   257 ms   279 ms   261 ms  cr1.la2ca.ip.att.net [12.122.128.14]
16   242 ms   259 ms   249 ms  gar5.la2ca.ip.att.net [12.122.128.25]
17   252 ms     *     1691 ms  12.122.255.74
18     *     2361 ms   634 ms  mdf001c7613r0003-gig-10-1.lax1.attens.net [12.129.193.242]
19     *        *        *     Request timed out.

不幸的是,我不熟悉 tcptraceroute。

curl 的 Windows 二进制版本不会为 http://www.wowarmory.com/ 返回任何内容,会为http://www.yahoo.com/返回任何内容

我没有 wget 可用。

编辑2:我可以访问我的本地化网站就好了。这只是我没有收到 curl 的回复。我正在运行一个几乎默认的 XAMPP 安装(windows xp 上的 apache 2)。所有这一切都很好。

4

2 回答 2

2

您可以通过 Web 浏览器甚至通过命令行实用程序从本地主机访问它curlwget

tcptraceroute告诉你什么?

如果 Web 浏览器和命令行实用程序都不能工作,但tcptraceroute可以工作(并且没有在某处显示透明代理),并且您位于 DSL 链接后面,那么您的问题可能是PMTU blackhole。如果是这种情况,解决方法是MSS 钳位

于 2008-11-16T23:25:08.643 回答
0

api 可能会将响应返回给某个 URL(比如 nextUrl 或 currentUrl)。如果您的 URL 是 localhost 或本地系统 IP 地址,api 响应如何以及在何处返回..?因为 api 将响应 nextUrl() 或 currentUrl()。所以请使用永久IP或域名来工作。

于 2011-07-05T09:12:55.707 回答