Не могу получить доступ к сайту через cURL с локального хоста, но могу с хост-сервера - PullRequest
1 голос
/ 17 ноября 2008

Я пишу скрипт, который извлекает данные XML с wowarmory.com, используя PHP 5 и cURL:

$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);

Когда я запускаю это с моего веб-сервера, я получаю 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

Localhost:

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

Есть идеи?

РЕДАКТИРОВАТЬ: Localhost работает под управлением 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: Я могу получить доступ к моему localhosted веб-сайт очень хорошо. Это просто ответ от керла, который я не получаю. Я использую XAMPP по умолчанию (apache 2 на Windows XP). Все это прекрасно работает.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2008

Вы можете получить к нему доступ с локального хоста через веб-браузер или даже через утилиты командной строки curl или wget?

Что tcptraceroute говорит вам?

Если ни веб-браузер, ни утилита командной строки не работают, но tcptraceroute работает (и где-то не показывает прозрачный прокси-сервер), и вы находитесь за ссылкой DSL, возможно, ваша проблема связана с PMTU blackhole . Если дело обстоит так, обходной путь - MSS, зажимающий .

0 голосов
/ 05 июля 2011

API, вероятно, возвращают ответы на некоторые URL (скажем, nextUrl или currentUrl). если ваш URL-адрес - localhost или IP-адрес локальной системы, как и где ответ API возвращается обратно ...? Потому что API ответит на nextUrl () или currentUrl (). Поэтому, пожалуйста, используйте постоянный IP или доменное имя для работы.

...