Ошибка при выполнении HTTP-запроса REST к API 3-го раздела. Возможно, связано с IPv6

#ruby-on-rails #ruby #xmlhttprequest #ipv6 #ipv4

#ruby-on-rails #ruby #xmlhttprequest #ipv6 #ipv4

Вопрос:

Я пытаюсь сделать некоторый http-запрос к стороннему API, используя rest-client или httparty. Код, который я запускаю, является:

на терминале:

  httparty 'http://swapi.co/api/people/1'
 

Он выдает эту ошибку:

 /Users/user_name/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/net/http.rb:879:in `initialize': No route to host - connect(2) for "swapi.co" port 80 (Errno::EHOSTUNREACH)
from /Users/user_name/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/net/http.rb:879:in `open'
from /Users/user_name/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/net/http.rb:879:in `block in connect'
from /Users/user_name/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/timeout.rb:73:in `timeout'
from /Users/user_name/.rvm/rubies/ruby-
 

в моем приложении:

  test_data=RestClient.get('http://swapi.co/api/people/1')
 

Они выдают аналогичную ошибку:

 Errno::EHOSTUNREACH: No route to host - connect(2) for "swapi.co" port 80
 

из /Users/имя_пользователя/.rvm/gems/ruby-2.2.3/gems/http-0.9.9/lib/http/timeout/null.rb:18: в `инициализировать»

Я думаю, что это как-то связано с конфигурациями IP, но я не уверен, с чего начать устранение неполадок. Я был бы признателен, если кто-нибудь может указать мне правильное направление, как решить эту проблему.

Потенциально важные примечания: 1) Я получаю эту ошибку с тех пор, как обновился с более старой версии OSX до Sierra OSX. Я сделал это, потому что до этого мои http-запросы (с rest-client, httparty или curl) работали, но они постоянно занимали 1 минуту и 16 секунд для очень небольшого количества данных. Когда я делаю curl сейчас, они работают довольно быстро, так что проблема была решена.

Комментарии:

1. Это не проблема с Ruby или клиентами, поскольку запросы работают для меня в моей системе. скорее всего, это связано с конфигурацией вашей системы или сетью. Я бы рекомендовал посмотреть на суперпользователя и задать другой вопрос. Время отклика более 1 минуты — это намек на то, что сеть и / или DNS недовольны.

2. запросы curl работают сейчас, и они не медленные. Проблема с медленным ответом была до обновления до OS X Sierra. Теперь сложность заключается в выполнении запроса rest с помощью rest-client или httparty

3. Как я уже сказал, и rest-client, и HTTParty отлично работают в моей системе Mac OS, чтобы попасть по этому URL-адресу и вернуть страницу с ответом менее секунды. У вашего браузера такая же проблема при загрузке страницы? Почему IPv6 может быть проблемой? Отключите его в своей сети и посмотрите, работает ли IPv4. Нам нужно больше информации, потому что в настоящее время мы ничего не знаем о вашей системе, ее конфигурации или вашем сетевом подключении.

4. У меня отлично работает на IPv6. Есть ли у вас вообще подключение по IPv6? Если вы не уверены, вы можете проверить это на myip.addr.space (мой). Возможно, ваш интернет-провайдер нарушил протокол IPv6, или CloudFlare снова нарушил его, или что-то еще.

5. Некоторые обновления: 1) Сегодня я пошел в starbucks, и все работало как по волшебству при их подключении 2) Дома все хорошо работает в моем браузере и в curl. 3) Я провел тест, говорит, что он не смог определить адрес IPv6. 4) После запуска теста я отключил IPv6, и теперь клиенты ruby, похоже, также работают с моим домашним подключением. Я предполагаю, что это решает проблему, за исключением того, что я прочитал в Интернете, что отключение IPv6 не является идеальным (исключая интернет IPv6). Кто-нибудь может подумать о других решениях?

Ответ №1:

Я решил это, отключив IPv4. Не уверен, что это вернется, чтобы преследовать меня в будущем, но на данный момент это устранило все проблемы со всеми клиентами http-запросов.