about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen <eugen@zeonfederated.com>2017-04-25 02:47:31 +0200
committerGitHub <noreply@github.com>2017-04-25 02:47:31 +0200
commit17c591ffba59bda512fe43a09c06c40324acc472 (patch)
treec03ba1c23b0adf46230b3b97b62efb018c26ded5
parentbb04a9be52e005fb8bbeef22e5b8d30f0d202903 (diff)
Punycode URI normalization (#2370)
* Fix #2119 - Whenever about to send a HTTP request, normalize the URI

* Add test for IDN request in FetchLinkCardService

* Perform IDN normalization on domains before they are stored in the DB
-rw-r--r--app/controllers/api/push_controller.rb2
-rw-r--r--app/controllers/authorize_follow_controller.rb2
-rw-r--r--app/lib/tag_manager.rb8
-rw-r--r--app/models/account.rb31
-rw-r--r--app/models/domain_block.rb8
-rw-r--r--app/models/media_attachment.rb2
-rw-r--r--app/services/fetch_link_card_service.rb2
-rw-r--r--app/services/fetch_remote_account_service.rb2
-rw-r--r--app/services/fetch_remote_status_service.rb2
-rw-r--r--app/services/follow_remote_account_service.rb2
-rw-r--r--app/services/process_feed_service.rb6
-rw-r--r--app/services/process_interaction_service.rb2
-rw-r--r--app/services/pubsubhubbub/subscribe_service.rb2
-rw-r--r--app/validators/url_validator.rb2
-rw-r--r--app/workers/pubsubhubbub/delivery_worker.rb2
-rw-r--r--spec/fixtures/requests/idn.txt483
-rw-r--r--spec/services/fetch_link_card_service_spec.rb14
17 files changed, 546 insertions, 26 deletions
diff --git a/app/controllers/api/push_controller.rb b/app/controllers/api/push_controller.rb
index f2ddfd969..bc547d653 100644
--- a/app/controllers/api/push_controller.rb
+++ b/app/controllers/api/push_controller.rb
@@ -26,7 +26,7 @@ class Api::PushController < ApiController
   def topic_to_account(topic_url)
     return if topic_url.blank?
 
-    uri    = Addressable::URI.parse(topic_url)
+    uri    = Addressable::URI.parse(topic_url).normalize
     params = Rails.application.routes.recognize_path(uri.path)
     domain = uri.host + (uri.port ? ":#{uri.port}" : '')
 
diff --git a/app/controllers/authorize_follow_controller.rb b/app/controllers/authorize_follow_controller.rb
index c98a5f45f..9b28a9455 100644
--- a/app/controllers/authorize_follow_controller.rb
+++ b/app/controllers/authorize_follow_controller.rb
@@ -6,7 +6,7 @@ class AuthorizeFollowController < ApplicationController
   before_action :authenticate_user!
 
   def new
-    uri = Addressable::URI.parse(acct_param)
+    uri = Addressable::URI.parse(acct_param).normalize
 
     if uri.path && %w(http https).include?(uri.scheme)
       set_account_from_url
diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb
index f26c943d2..3bddfba7c 100644
--- a/app/lib/tag_manager.rb
+++ b/app/lib/tag_manager.rb
@@ -64,6 +64,12 @@ class TagManager
     domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.local_domain).zero?
   end
 
+  def normalize_domain(domain)
+    uri = Addressable::URI.new
+    uri.host = domain
+    uri.normalize.host
+  end
+
   def same_acct?(canonical, needle)
     return true if canonical.casecmp(needle).zero?
     username, domain = needle.split('@')
@@ -71,7 +77,7 @@ class TagManager
   end
 
   def local_url?(url)
-    uri    = Addressable::URI.parse(url)
+    uri    = Addressable::URI.parse(url).normalize
     domain = uri.host + (uri.port ? ":#{uri.port}" : '')
     TagManager.instance.local_domain?(domain)
   end
diff --git a/app/models/account.rb b/app/models/account.rb
index 084b17f43..eebcf90b8 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -182,22 +182,22 @@ class Account < ApplicationRecord
   end
 
   def avatar_remote_url=(url)
-    parsed_url = URI.parse(url)
+    parsed_url = Addressable::URI.parse(url).normalize
 
     return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.empty? || self[:avatar_remote_url] == url
 
-    self.avatar              = parsed_url
+    self.avatar              = URI.parse(parsed_url.to_s)
     self[:avatar_remote_url] = url
   rescue OpenURI::HTTPError => e
     Rails.logger.debug "Error fetching remote avatar: #{e}"
   end
 
   def header_remote_url=(url)
-    parsed_url = URI.parse(url)
+    parsed_url = Addressable::URI.parse(url).normalize
 
     return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.empty? || self[:header_remote_url] == url
 
-    self.header              = parsed_url
+    self.header              = URI.parse(parsed_url.to_s)
     self[:header_remote_url] = url
   rescue OpenURI::HTTPError => e
     Rails.logger.debug "Error fetching remote header: #{e}"
@@ -331,16 +331,25 @@ class Account < ApplicationRecord
     end
   end
 
-  before_create do
-    if local?
-      keypair = OpenSSL::PKey::RSA.new(Rails.env.test? ? 1024 : 2048)
-      self.private_key = keypair.to_pem
-      self.public_key  = keypair.public_key.to_pem
-    end
-  end
+  before_create :generate_keys
+  before_validation :normalize_domain
 
   private
 
+  def generate_keys
+    return unless local?
+
+    keypair = OpenSSL::PKey::RSA.new(Rails.env.test? ? 1024 : 2048)
+    self.private_key = keypair.to_pem
+    self.public_key  = keypair.public_key.to_pem
+  end
+
+  def normalize_domain
+    return if local?
+
+    self.domain = TagManager.instance.normalize_domain(domain)
+  end
+
   def set_file_extensions
     unless avatar.blank?
       extension = Paperclip::Interpolations.content_type_extension(avatar, :original)
diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb
index baf5c3973..6c2ba70f7 100644
--- a/app/models/domain_block.rb
+++ b/app/models/domain_block.rb
@@ -13,4 +13,12 @@ class DomainBlock < ApplicationRecord
   def self.blocked?(domain)
     where(domain: domain, severity: :suspend).exists?
   end
+
+  before_validation :normalize_domain
+
+  private
+
+  def normalize_domain
+    self.domain = TagManager.instance.normalize_domain(domain)
+  end
 end
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 181e01674..a43c76c77 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -42,7 +42,7 @@ class MediaAttachment < ApplicationRecord
   end
 
   def file_remote_url=(url)
-    self.file = URI.parse(url)
+    self.file = URI.parse(Addressable::URI.parse(url).normalize.to_s)
   end
 
   def to_param
diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb
index 31f9be194..f74a0d34d 100644
--- a/app/services/fetch_link_card_service.rb
+++ b/app/services/fetch_link_card_service.rb
@@ -19,7 +19,7 @@ class FetchLinkCardService < BaseService
 
     card.title       = meta_property(page, 'og:title') || page.at_xpath('//title')&.content
     card.description = meta_property(page, 'og:description') || meta_property(page, 'description')
-    card.image       = URI.parse(meta_property(page, 'og:image')) if meta_property(page, 'og:image')
+    card.image       = URI.parse(Addressable::URI.parse(meta_property(page, 'og:image')).normalize.to_s) if meta_property(page, 'og:image')
 
     return if card.title.blank?
 
diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb
index 50ffc47c6..7c2fb0ef1 100644
--- a/app/services/fetch_remote_account_service.rb
+++ b/app/services/fetch_remote_account_service.rb
@@ -21,7 +21,7 @@ class FetchRemoteAccountService < BaseService
 
     email = xml.at_xpath('//xmlns:author/xmlns:email').try(:content)
     if email.nil?
-      url_parts = Addressable::URI.parse(url)
+      url_parts = Addressable::URI.parse(url).normalize
       username  = xml.at_xpath('//xmlns:author/xmlns:name').try(:content)
       domain    = url_parts.host
     else
diff --git a/app/services/fetch_remote_status_service.rb b/app/services/fetch_remote_status_service.rb
index e2d185723..c666961ad 100644
--- a/app/services/fetch_remote_status_service.rb
+++ b/app/services/fetch_remote_status_service.rb
@@ -31,7 +31,7 @@ class FetchRemoteStatusService < BaseService
   end
 
   def extract_author(url, xml)
-    url_parts = Addressable::URI.parse(url)
+    url_parts = Addressable::URI.parse(url).normalize
     username  = xml.at_xpath('//xmlns:author/xmlns:name').try(:content)
     domain    = url_parts.host
 
diff --git a/app/services/follow_remote_account_service.rb b/app/services/follow_remote_account_service.rb
index 2d7414bc0..fbf983093 100644
--- a/app/services/follow_remote_account_service.rb
+++ b/app/services/follow_remote_account_service.rb
@@ -73,7 +73,7 @@ class FollowRemoteAccountService < BaseService
   end
 
   def get_feed(url)
-    response = http_client.get(Addressable::URI.parse(url))
+    response = http_client.get(Addressable::URI.parse(url).normalize)
     [response.to_s, Nokogiri::XML(response)]
   end
 
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
index 98d92f630..d002b9130 100644
--- a/app/services/process_feed_service.rb
+++ b/app/services/process_feed_service.rb
@@ -174,7 +174,7 @@ class ProcessFeedService < BaseService
     end
 
     def account_from_href(href)
-      url = Addressable::URI.parse(href)
+      url = Addressable::URI.parse(href).normalize
 
       if TagManager.instance.web_domain?(url.host)
         Account.find_local(url.path.gsub('/users/', ''))
@@ -195,7 +195,7 @@ class ProcessFeedService < BaseService
         next unless link['href']
 
         media = MediaAttachment.where(status: parent, remote_url: link['href']).first_or_initialize(account: parent.account, status: parent, remote_url: link['href'])
-        parsed_url = URI.parse(link['href'])
+        parsed_url = Addressable::URI.parse(link['href']).normalize
 
         next if !%w[http https].include?(parsed_url.scheme) || parsed_url.host.empty?
 
@@ -271,7 +271,7 @@ class ProcessFeedService < BaseService
     def acct(xml = @xml)
       username = xml.at_xpath('./xmlns:author/xmlns:name', xmlns: TagManager::XMLNS).content
       url      = xml.at_xpath('./xmlns:author/xmlns:uri', xmlns: TagManager::XMLNS).content
-      domain   = Addressable::URI.parse(url).host
+      domain   = Addressable::URI.parse(url).normalize.host
 
       "#{username}@#{domain}"
     end
diff --git a/app/services/process_interaction_service.rb b/app/services/process_interaction_service.rb
index 805ca5a27..410e805d3 100644
--- a/app/services/process_interaction_service.rb
+++ b/app/services/process_interaction_service.rb
@@ -14,7 +14,7 @@ class ProcessInteractionService < BaseService
 
     username = xml.at_xpath('/xmlns:entry/xmlns:author/xmlns:name', xmlns: TagManager::XMLNS).content
     url      = xml.at_xpath('/xmlns:entry/xmlns:author/xmlns:uri', xmlns: TagManager::XMLNS).content
-    domain   = Addressable::URI.parse(url).host
+    domain   = Addressable::URI.parse(url).normalize.host
     account  = Account.find_by(username: username, domain: domain)
 
     if account.nil?
diff --git a/app/services/pubsubhubbub/subscribe_service.rb b/app/services/pubsubhubbub/subscribe_service.rb
index bf36e3fa6..3642b4eca 100644
--- a/app/services/pubsubhubbub/subscribe_service.rb
+++ b/app/services/pubsubhubbub/subscribe_service.rb
@@ -4,7 +4,7 @@ class Pubsubhubbub::SubscribeService < BaseService
   def call(account, callback, secret, lease_seconds)
     return ['Invalid topic URL',        422] if account.nil?
     return ['Invalid callback URL',     422] unless !callback.blank? && callback =~ /\A#{URI.regexp(%w(http https))}\z/
-    return ['Callback URL not allowed', 403] if DomainBlock.blocked?(Addressable::URI.parse(callback).host)
+    return ['Callback URL not allowed', 403] if DomainBlock.blocked?(Addressable::URI.parse(callback).normalize.host)
 
     subscription = Subscription.where(account: account, callback_url: callback).first_or_create!(account: account, callback_url: callback)
     Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'subscribe', secret, lease_seconds)
diff --git a/app/validators/url_validator.rb b/app/validators/url_validator.rb
index 4a5c4ef3f..f39560d90 100644
--- a/app/validators/url_validator.rb
+++ b/app/validators/url_validator.rb
@@ -8,7 +8,7 @@ class UrlValidator < ActiveModel::EachValidator
   private
 
   def compliant?(url)
-    parsed_url = Addressable::URI.parse(url)
+    parsed_url = Addressable::URI.parse(url).normalize
     !parsed_url.nil? && %w(http https).include?(parsed_url.scheme) && parsed_url.host
   end
 end
diff --git a/app/workers/pubsubhubbub/delivery_worker.rb b/app/workers/pubsubhubbub/delivery_worker.rb
index b440f7986..f645b1e24 100644
--- a/app/workers/pubsubhubbub/delivery_worker.rb
+++ b/app/workers/pubsubhubbub/delivery_worker.rb
@@ -13,7 +13,7 @@ class Pubsubhubbub::DeliveryWorker
   def perform(subscription_id, payload)
     subscription = Subscription.find(subscription_id)
     headers      = {}
-    host         = Addressable::URI.parse(subscription.callback_url).host
+    host         = Addressable::URI.parse(subscription.callback_url).normalize.host
 
     return if DomainBlock.blocked?(host)
 
diff --git a/spec/fixtures/requests/idn.txt b/spec/fixtures/requests/idn.txt
new file mode 100644
index 000000000..3c76c59c0
--- /dev/null
+++ b/spec/fixtures/requests/idn.txt
@@ -0,0 +1,483 @@
+HTTP/1.1 200 OK

+Server: nginx

+Date: Sun, 23 Apr 2017 19:37:13 GMT

+Content-Type: text/html

+Content-Length: 38111

+Last-Modified: Wed, 20 Jul 2016 02:50:52 GMT

+Connection: keep-alive

+Accept-Ranges: bytes

+

+<!DOCTYPE html>

+<html>

+	<head>

+		<meta charset="UTF-8">

+		<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />

+		<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">

+		<script>

+          var _hmt = _hmt || [];

+          (function() {

+            var hm = document.createElement("script");

+            hm.src = "http://hm.baidu.com/hm.js?746c3f6346fae8612933e5921803ee32";

+            var s = document.getElementsByTagName("script")[0]; 

+            s.parentNode.insertBefore(hm, s);

+          })();

+	

+    	</script>

+

+

+		<link rel="stylesheet" type="text/css" href="css/common.css"/>

+		<script src="js/jquery-1.11.1.min.js" type="text/javascript" charset="utf-8"></script>

+		<script src="js/common.js" type="text/javascript" charset="utf-8"></script>

+		<script src="js/carousel.js" type="text/javascript" charset="utf-8"></script>

+		<title>中国域名网站</title>

+

+	</head>

+	<body>

+		<div class="head-tips" id="headTip">

+			<span class="close" id="headtips-close"><img src="css/img/close.png" alt="" /></span>

+		</div>

+		<div class="banner-bg"></div>

+		<div class="container">

+			<div class="banner">

+				<img src="css/img/banner.png" alt="" />

+			</div>

+			<div class="nav">

+				<h1>名站导航</h1>

+				<div class="left-btn" id="pre">

+					<img src="css/img/arrow-left.png" alt="" />

+				</div>

+				<div class="carousel">

+					<ul class="carousel-content">

+						<li>

+							<a href="http://中央电视台.中国"  target="_blank">

+								<img src="css/img/p10.png" alt="" />

+								<p>中央电视台.中国</p>

+							</a><a href="http://平安北京.中国"  target="_blank" class="mt-4">

+								<img src="css/img/p5.png" alt="" />

+								<p>平安北京.中国</p>

+							</a>

+						</li>

+						<li>

+							<a href="http://人民网.中国"  target="_blank">

+								<img src="css/img/p6.png" alt="" />

+								<p>人民网.中国</p>

+							</a><a href="http://招商银行.中国"  target="_blank" class="mt-4">

+								<img src="css/img/p8.png" alt="" />

+								<p>招商银行.中国</p>

+							</a>

+						</li>

+						<li>

+							<a href="http://必胜客宅急送.中国"  target="_blank">

+								<img src="css/img/p1.png" alt="" />

+								<p>必胜客宅急送.中国</p>

+							</a><a href="http://创业咖啡.中国"  target="_blank" class="mt-4">

+								<img src="css/img/p2.png" alt="" />

+								<p>创业咖啡.中国</p>

+							</a>

+						</li>

+						<li>

+							<a href="http://中国移动.中国"  target="_blank">

+								<img src="css/img/p9.png" alt="" />

+								<p>中国移动.中国</p>

+							</a><a href="http://海盟.中国"  target="_blank" class="mt-4">

+								<img src="css/img/p3.png" alt="" />

+								<p>海盟.中国</p>

+							</a>

+						</li>

+						<li>

+							<a href="http://艺龙.中国"  target="_blank">

+								<img src="css/img/p7.png" alt="" />

+								<p>艺龙.中国</p>

+							</a><a href="http://和讯.中国"  target="_blank" class="mt-4">

+								<img src="css/img/p4.png" alt="" />

+								<p>和讯.中国</p>

+							</a>

+						</li>

+					</ul>

+				</div>

+				<div class="right-btn" id="next">

+					<img src="css/img/arrow-right.png" alt="" />

+				</div>

+			</div>

+		</div>

+		<div class="all-url">

+			<div class="container">

+				<h1>网址大全</h1>

+				<ul class="url">

+					<li><a href="http://人民网.中国" target="_blank">人民网.中国</a></li>

+					<li><a href="http://新华网.中国" target="_blank">新华网.中国</a></li>

+					<li><a href="http://中央电视台.中国" target="_blank">中央电视台.中国</a></li>

+					<li><a href="http://光明网.中国" target="_blank">光明网.中国</a></li>

+					<li><a href="http://平安北京.中国" target="_blank">平安北京.中国</a></li>

+					<li><a href="http://联想微博.中国" target="_blank">联想微博.中国</a></li>

+					<li><a href="http://首都网警.中国" target="_blank">首都网警.中国</a></li>

+					<li><a href="http://北京消防.中国" target="_blank">北京消防.中国</a></li>

+					<li><a href="http://海淀公安.中国" target="_blank">海淀公安.中国</a></li>

+					<li><a href="http://通州警方.中国" target="_blank">通州警方.中国</a></li>

+					<li><a href="http://门头沟禁毒.中国" target="_blank">门头沟禁毒.中国</a></li>

+					<li><a href="http://西部数码.中国" target="_blank">西部数码.中国</a></li>

+					<li><a href="http://中央电视台.中国" target="_blank">中央电视台.中国</a></li>

+					<li><a href="http://中国移动.中国" target="_blank">中国移动.中国</a></li>

+					<li><a href="http://必胜宅急送.中国" target="_blank">必胜宅急送.中国</a></li>

+					<li><a href="http://老正兴.中国" target="_blank">老正兴.中国</a></li>

+					<li><a href="http://广州酒家.中国" target="_blank">广州酒家.中国</a></li>

+					<li><a href="http://格力.中国" target="_blank">格力.中国</a></li>

+					<li><a href="http://福建金爵.中国" target="_blank">福建金爵.中国</a></li>

+					<li><a href="http://和信房产.中国" target="_blank">和信房产.中国</a></li>

+					<li><a href="http://金爵房地产.中国" target="_blank">金爵房地产.中国</a></li>

+					<li><a href="http://联泰地产.中国" target="_blank">联泰地产.中国</a></li>

+					<li><a href="http://鲁商置业.中国" target="_blank">鲁商置业.中国</a></li>

+					<li><a href="http://鲁商置业股份.中国" target="_blank">鲁商置业股份.中国</a></li>

+					<li><a href="http://美佳华.中国" target="_blank">美佳华.中国</a></li>

+					<li><a href="http://金世纪工程.中国" target="_blank">金世纪工程.中国</a></li>

+					<li><a href="http://金世纪集团.中国" target="_blank">金世纪集团.中国</a></li>

+					<li><a href="http://深圳金世纪.中国" target="_blank">深圳金世纪.中国</a></li>

+					<li><a href="http://总部基地.中国" target="_blank">总部基地.中国</a></li>

+					<li><a href="http://德律风.中国" target="_blank">德律风.中国</a></li>

+					<li><a href="http://德律风物业.中国" target="_blank">德律风物业.中国</a></li>

+					<li><a href="http://柯林.中国" target="_blank">柯林.中国</a></li>

+					<li><a href="http://上海德律风物业.中国" target="_blank">上海德律风物业.中国</a></li>

+					<li><a href="http://广东海印集团股份.中国" target="_blank">广东海印集团股份.中国</a></li>

+					<li><a href="http://广东海印集团股份有限公司.中国" target="_blank">广东海印集团股份有限公司.中国</a></li>

+					<li><a href="http://艺龙.中国" target="_blank">艺龙.中国</a></li>

+					<li><a href="http://北京旅游信息网.中国" target="_blank">北京旅游信息网.中国</a></li>

+					<li><a href="http://北京故宫博物院.中国" target="_blank">北京故宫博物院.中国</a></li>

+					<li><a href="http://旅行张家界.中国" target="_blank">旅行张家界.中国</a></li>

+					<li><a href="http://张家界旅游.中国" target="_blank">张家界旅游.中国</a></li>

+					<li><a href="http://广州市旅游局.中国" target="_blank">广州市旅游局.中国</a></li>

+					<li><a href="http://旅游在线.中国" target="_blank">旅游在线.中国</a></li>

+					<li><a href="http://威海旅游集散中心.中国" target="_blank">威海旅游集散中心.中国</a></li>

+					<li><a href="http://锦州旅游.中国" target="_blank">锦州旅游.中国</a></li>

+					<li><a href="http://金牛湖风景旅游度假区.中国" target="_blank">金牛湖风景旅游度假区.中国</a></li>

+					<li><a href="http://环球旅行社.中国" target="_blank">环球旅行社.中国</a></li>

+					<li><a href="http://养鹿场.中国" target="_blank">养鹿场.中国</a></li>

+					<li><a href="http://东瀛游.中国" target="_blank">东瀛游.中国</a></li>

+					<li><a href="http://东瀛游旅行社.中国" target="_blank">东瀛游旅行社.中国</a></li>

+					<li><a href="http://桂林游.中国" target="_blank">桂林游.中国</a></li>

+					<li><a href="http://桂林之旅.中国" target="_blank">桂林之旅.中国</a></li>

+					<li><a href="http://美国环球旅行社.中国" target="_blank">美国环球旅行社.中国</a></li>

+					<li><a href="http://东天目山.中国" target="_blank">东天目山.中国</a></li>

+					<li><a href="http://凤山寺.中国" target="_blank">凤山寺.中国</a></li>

+					<li><a href="http://黄沙古渡.中国" target="_blank">黄沙古渡.中国</a></li>

+					<li><a href="http://城头山.中国" target="_blank">城头山.中国</a></li>

+					<li><a href="http://港游网.中国" target="_blank">港游网.中国</a></li>

+					<li><a href="http://一起游.中国" target="_blank">一起游.中国</a></li>

+					<li><a href="http://山水家园.中国" target="_blank">山水家园.中国</a></li>

+					<li><a href="http://蒋巷村.中国" target="_blank">蒋巷村.中国</a></li>

+					<li><a href="http://蒋巷村农业生态旅游.中国" target="_blank">蒋巷村农业生态旅游.中国</a></li>

+					<li><a href="http://厦门海峡旅行社.中国" target="_blank">厦门海峡旅行社.中国</a></li>

+					<li><a href="http://姜堰宾馆.中国" target="_blank">姜堰宾馆.中国</a></li>

+					<li><a href="http://上海远洋宾馆.中国" target="_blank">上海远洋宾馆.中国</a></li>

+					<li><a href="http://红栌山庄.中国" target="_blank">红栌山庄.中国</a></li>

+					<li><a href="http://金牛湖风景旅游度假区.中国" target="_blank">金牛湖风景旅游度假区.中国</a></li>

+					<li><a href="http://金牛湖风景区.中国" target="_blank">金牛湖风景区.中国</a></li>

+					<li><a href="http://北京半岛酒店.中国" target="_blank">北京半岛酒店.中国</a></li>

+					<li><a href="http://比华利山半岛酒店.中国" target="_blank">比华利山半岛酒店.中国</a></li>

+					<li><a href="http://东京半岛酒店.中国" target="_blank">东京半岛酒店.中国</a></li>

+					<li><a href="http://君乐酒店.中国" target="_blank">君乐酒店.中国</a></li>

+					<li><a href="http://凯迪威酒店.中国" target="_blank">凯迪威酒店.中国</a></li>

+					<li><a href="http://莱州酒店.中国" target="_blank">莱州酒店.中国</a></li>

+					<li><a href="http://曼谷半岛酒店.中国" target="_blank">曼谷半岛酒店.中国</a></li>

+					<li><a href="http://上海半岛酒店.中国" target="_blank">上海半岛酒店.中国</a></li>

+					<li><a href="http://上虞国际大酒店.中国" target="_blank">上虞国际大酒店.中国</a></li>

+					<li><a href="http://王府半島酒店.中国" target="_blank">王府半島酒店.中国</a></li>

+					<li><a href="http://香港半岛酒店.中国" target="_blank">香港半岛酒店.中国</a></li>

+					<li><a href="http://银河大酒店.中国" target="_blank">银河大酒店.中国</a></li>

+					<li><a href="http://健康365.中国" target="_blank">健康365.中国</a></li>

+					<li><a href="http://家天下.中国" target="_blank">家天下.中国</a></li>

+					<li><a href="http://北京大学第三医院.中国" target="_blank">北京大学第三医院.中国</a></li>

+					<li><a href="http://西藏阜康医药.中国" target="_blank">西藏阜康医药.中国</a></li>

+					<li><a href="http://沈阳妇婴医院.中国" target="_blank">沈阳妇婴医院.中国</a></li>

+					<li><a href="http://福建医科大学附属第一医院.中国" target="_blank">福建医科大学附属第一医院.中国</a></li>

+					<li><a href="http://北方药业.中国" target="_blank">北方药业.中国</a></li>

+					<li><a href="http://医药导报.中国" target="_blank">医药导报.中国</a></li>

+					<li><a href="http://中国医药导报.中国" target="_blank">中国医药导报.中国</a></li>

+					<li><a href="http://云南省医药有限公司.中国" target="_blank">云南省医药有限公司.中国</a></li>

+					<li><a href="http://云南省医药.中国" target="_blank">云南省医药.中国</a></li>

+					<li><a href="http://必胜宅急送.中国" target="_blank">必胜宅急送.中国</a></li>

+					<li><a href="http://青岛啤酒股份有限公司.中国" target="_blank">青岛啤酒股份有限公司.中国</a></li>

+					<li><a href="http://火锅面.中国" target="_blank">火锅面.中国</a></li>

+					<li><a href="http://57度湘.中国" target="_blank">57度湘.中国</a></li>

+					<li><a href="http://澳門佳景集團.中国" target="_blank">澳門佳景集團.中国</a></li>

+					<li><a href="http://澳門佳景飲食集團.中国" target="_blank">澳門佳景飲食集團.中国</a></li>

+					<li><a href="http://赤峰陈曲.中国" target="_blank">赤峰陈曲.中国</a></li>

+					<li><a href="http://春宝.中国" target="_blank">春宝.中国</a></li>

+					<li><a href="http://富农水稻.中国" target="_blank">富农水稻.中国</a></li>

+					<li><a href="http://功德林.中国" target="_blank">功德林.中国</a></li>

+					<li><a href="http://古船.中国" target="_blank">古船.中国</a></li>

+					<li><a href="http://古船食品.中国" target="_blank">古船食品.中国</a></li>

+					<li><a href="http://红岩村.中国" target="_blank">红岩村.中国</a></li>

+					<li><a href="http://佳景飲食集團.中国" target="_blank">佳景飲食集團.中国</a></li>

+					<li><a href="http://赖永初酒业.中国" target="_blank">赖永初酒业.中国</a></li>

+					<li><a href="http://厉家菜.中国" target="_blank">厉家菜.中国</a></li>

+					<li><a href="http://莲花岛.中国" target="_blank">莲花岛.中国</a></li>

+					<li><a href="http://廖平一两酒.中国" target="_blank">廖平一两酒.中国</a></li>

+					<li><a href="http://龙轩.中国" target="_blank">龙轩.中国</a></li>

+					<li><a href="http://迈德乐.中国" target="_blank">迈德乐.中国</a></li>

+					<li><a href="http://明记炖品.中国" target="_blank">明记炖品.中国</a></li>

+					<li><a href="http://明记炖品世家.中国" target="_blank">明记炖品世家.中国</a></li>

+					<li><a href="http://黔江鸡杂.中国" target="_blank">黔江鸡杂.中国</a></li>

+					<li><a href="http://聖安娜餅屋.中国" target="_blank">聖安娜餅屋.中国</a></li>

+					<li><a href="http://华夏茶业网.中国" target="_blank">华夏茶业网.中国</a></li>

+					<li><a href="http://宅香锅.中国" target="_blank">宅香锅.中国</a></li>

+					<li><a href="http://荞麦面.中国" target="_blank">荞麦面.中国</a></li>

+					<li><a href="http://宅面坊.中国" target="_blank">宅面坊.中国</a></li>

+					<li><a href="http://宅豆坊.中国" target="_blank">宅豆坊.中国</a></li>

+					<li><a href="http://草原羔羊肉.中国" target="_blank">草原羔羊肉.中国</a></li>

+					<li><a href="http://火锅饺.中国" target="_blank">火锅饺.中国</a></li>

+					<li><a href="http://鸟鸡蛋.中国" target="_blank">鸟鸡蛋.中国</a></li>

+					<li><a href="http://宅米饭.中国" target="_blank">宅米饭.中国</a></li>

+					<li><a href="http://白野猪肉.中国" target="_blank">白野猪肉.中国</a></li>

+					<li><a href="http://黑野猪肉.中国" target="_blank">黑野猪肉.中国</a></li>

+					<li><a href="http://特色野猪肉.中国" target="_blank">特色野猪肉.中国</a></li>

+					<li><a href="http://生态畜牧.中国" target="_blank">生态畜牧.中国</a></li>

+					<li><a href="http://野豆坊.中国" target="_blank">野豆坊.中国</a></li>

+					<li><a href="http://野猪牧.中国" target="_blank">野猪牧.中国</a></li>

+					<li><a href="http://野猪网.中国" target="_blank">野猪网.中国</a></li>

+					<li><a href="http://酷牛肉.中国" target="_blank">酷牛肉.中国</a></li>

+					<li><a href="http://羔羊网.中国" target="_blank">羔羊网.中国</a></li>

+					<li><a href="http://野猪肉.中国" target="_blank">野猪肉.中国</a></li>

+					<li><a href="http://鸟鸡肉.中国" target="_blank">鸟鸡肉.中国</a></li>

+					<li><a href="http://藏羔羊.中国" target="_blank">藏羔羊.中国</a></li>

+					<li><a href="http://酷牛牧场.中国" target="_blank">酷牛牧场.中国</a></li>

+					<li><a href="http://鸟鸡牧场.中国" target="_blank">鸟鸡牧场.中国</a></li>

+					<li><a href="http://鸟鸡网.中国" target="_blank">鸟鸡网.中国</a></li>

+					<li><a href="http://家餐馆.中国" target="_blank">家餐馆.中国</a></li>

+					<li><a href="http://宅火锅.中国" target="_blank">宅火锅.中国</a></li>

+					<li><a href="http://食品饮料网.中国" target="_blank">食品饮料网.中国</a></li>

+					<li><a href="http://中国湿巾.中国" target="_blank">中国湿巾.中国</a></li>

+					<li><a href="http://海特果菜.中国" target="_blank">海特果菜.中国</a></li>

+					<li><a href="http://果菜.中国" target="_blank">果菜.中国</a></li>

+					<li><a href="http://宏鑫德.中国" target="_blank">宏鑫德.中国</a></li>

+					<li><a href="http://北方烧酒.中国" target="_blank">北方烧酒.中国</a></li>

+					<li><a href="http://欧兰娑曼.中国" target="_blank">欧兰娑曼.中国</a></li>

+					<li><a href="http://威尔富.中国" target="_blank">威尔富.中国</a></li>

+					<li><a href="http://虎林老窖.中国" target="_blank">虎林老窖.中国</a></li>

+					<li><a href="http://唐记食品.中国" target="_blank">唐记食品.中国</a></li>

+					<li><a href="http://津恺食品.中国" target="_blank">津恺食品.中国</a></li>

+					<li><a href="http://津恺.中国" target="_blank">津恺.中国</a></li>

+					<li><a href="http://老中医养生.中国" target="_blank">老中医养生.中国</a></li>

+					<li><a href="http://山东伟龙食品公司.中国" target="_blank">山东伟龙食品公司.中国</a></li>

+					<li><a href="http://太泉蜂业.中国" target="_blank">太泉蜂业.中国</a></li>

+					<li><a href="http://天鹅肉.中国" target="_blank">天鹅肉.中国</a></li>

+					<li><a href="http://望湘园.中国" target="_blank">望湘园.中国</a></li>

+					<li><a href="http://伟龙饼干.中国" target="_blank">伟龙饼干.中国</a></li>

+					<li><a href="http://沃根葡萄酒.中国" target="_blank">沃根葡萄酒.中国</a></li>

+					<li><a href="http://亚坤集团.中国" target="_blank">亚坤集团.中国</a></li>

+					<li><a href="http://鱼丸.中国" target="_blank">鱼丸.中国</a></li>

+					<li><a href="http://真美集团.中国" target="_blank">真美集团.中国</a></li>

+					<li><a href="http://真美食品.中国" target="_blank">真美食品.中国</a></li>

+					<li><a href="http://中国餐饮标识.中国" target="_blank">中国餐饮标识.中国</a></li>

+					<li><a href="http://迷奇.中国" target="_blank">迷奇.中国</a></li>

+					<li><a href="http://乐隆隆.中国" target="_blank">乐隆隆.中国</a></li>

+					<li><a href="http://绞股蓝.中国" target="_blank">绞股蓝.中国</a></li>

+					<li><a href="http://瀑布仙茗.中国" target="_blank">瀑布仙茗.中国</a></li>

+					<li><a href="http://金记食品.中国" target="_blank">金记食品.中国</a></li>

+					<li><a href="http://朱老六.中国" target="_blank">朱老六.中国</a></li>

+					<li><a href="http://嘉太.中国" target="_blank">嘉太.中国</a></li>

+					<li><a href="http://顺德堂.中国" target="_blank">顺德堂.中国</a></li>

+					<li><a href="http://广味源.中国" target="_blank">广味源.中国</a></li>

+					<li><a href="http://德辉食品.中国" target="_blank">德辉食品.中国</a></li>

+					<li><a href="http://金龙船.中国" target="_blank">金龙船.中国</a></li>

+					<li><a href="http://东方即白.中国" target="_blank">东方即白.中国</a></li>

+					<li><a href="http://中山华美实业.中国" target="_blank">中山华美实业.中国</a></li>

+					<li><a href="http://富士亭.中国" target="_blank">富士亭.中国</a></li>

+					<li><a href="http://三安科技.中国" target="_blank">三安科技.中国</a></li>

+					<li><a href="http://供美香食品.中国" target="_blank">供美香食品.中国</a></li>

+					<li><a href="http://丰德天元.中国" target="_blank">丰德天元.中国</a></li>

+					<li><a href="http://老藏医.中国" target="_blank">老藏医.中国</a></li>

+					<li><a href="http://新农仓.中国" target="_blank">新农仓.中国</a></li>

+					<li><a href="http://濠吉.中国" target="_blank">濠吉.中国</a></li>

+					<li><a href="http://品味爽.中国" target="_blank">品味爽.中国</a></li>

+					<li><a href="http://坤育.中国" target="_blank">坤育.中国</a></li>

+					<li><a href="http://皇宫食品.中国" target="_blank">皇宫食品.中国</a></li>

+					<li><a href="http://依海.中国" target="_blank">依海.中国</a></li>

+					<li><a href="http://广州凯虹.中国" target="_blank">广州凯虹.中国</a></li>

+					<li><a href="http://宝姿日化.中国" target="_blank">宝姿日化.中国</a></li>

+					<li><a href="http://乐高乐.中国" target="_blank">乐高乐.中国</a></li>

+					<li><a href="http://茂华食品.中国" target="_blank">茂华食品.中国</a></li>

+					<li><a href="http://白鹿集团.中国" target="_blank">白鹿集团.中国</a></li>

+					<li><a href="http://好丽友集团.中国" target="_blank">好丽友集团.中国</a></li>

+					<li><a href="http://法兰红.中国" target="_blank">法兰红.中国</a></li>

+					<li><a href="http://教育部.中国" target="_blank">教育部.中国</a></li>

+					<li><a href="http://国家民委.中国" target="_blank">国家民委.中国</a></li>

+					<li><a href="http://人口计生委.中国" target="_blank">人口计生委.中国</a></li>

+					<li><a href="http://工商总局.中国" target="_blank">工商总局.中国</a></li>

+					<li><a href="http://监察部.中国" target="_blank">监察部.中国</a></li>

+					<li><a href="http://农业部.中国" target="_blank">农业部.中国</a></li>

+					<li><a href="http://人民银行.中国" target="_blank">人民银行.中国</a></li>

+					<li><a href="http://侨办.中国" target="_blank">侨办.中国</a></li>

+					<li><a href="http://食品药品监督局.中国" target="_blank">食品药品监督局.中国</a></li>

+					<li><a href="http://科技部.中国" target="_blank">科技部.中国</a></li>

+					<li><a href="http://财政部.中国" target="_blank">财政部.中国</a></li>

+					<li><a href="http://文化部.中国" target="_blank">文化部.中国</a></li>

+					<li><a href="http://审计署.中国" target="_blank">审计署.中国</a></li>

+					<li><a href="http://体育总局.中国" target="_blank">体育总局.中国</a></li>

+					<li><a href="http://知识产权局.中国" target="_blank">知识产权局.中国</a></li>

+					<li><a href="http://国研网.中国" target="_blank">国研网.中国</a></li>

+					<li><a href="http://电监会.中国" target="_blank">电监会.中国</a></li>

+					<li><a href="http://民航总局.中国" target="_blank">民航总局.中国</a></li>

+					<li><a href="http://卫生部.中国" target="_blank">卫生部.中国</a></li>

+					<li><a href="http://安全监察总局.中国" target="_blank">安全监察总局.中国</a></li>

+					<li><a href="http://国家行政学院.中国" target="_blank">国家行政学院.中国</a></li>

+					<li><a href="http://申银万国.中国" target="_blank">申银万国.中国</a></li>

+					<li><a href="http://保定保险协会.中国" target="_blank">保定保险协会.中国</a></li>

+					<li><a href="http://和讯.中国" target="_blank">和讯.中国</a></li>

+					<li><a href="http://招商证券.中国" target="_blank">招商证券.中国</a></li>

+					<li><a href="http://中投证券.中国" target="_blank">中投证券.中国</a></li>

+					<li><a href="http://鹏元征信.中国" target="_blank">鹏元征信.中国</a></li>

+					<li><a href="http://中融联合.中国" target="_blank">中融联合.中国</a></li>

+					<li><a href="http://长城资产.中国" target="_blank">长城资产.中国</a></li>

+					<li><a href="http://周生生證券.中国" target="_blank">周生生證券.中国</a></li>

+					<li><a href="http://福建湄洲湾控股.中国" target="_blank">福建湄洲湾控股.中国</a></li>

+					<li><a href="http://中安现金.中国" target="_blank">中安现金.中国</a></li>

+					<li><a href="http://中安信业.中国" target="_blank">中安信业.中国</a></li>

+					<li><a href="http://聯訊證券.中国" target="_blank">聯訊證券.中国</a></li>

+					<li><a href="http://元富理財网.中国" target="_blank">元富理財网.中国</a></li>

+					<li><a href="http://金立方资本.中国" target="_blank">金立方资本.中国</a></li>

+					<li><a href="http://安信证券.中国" target="_blank">安信证券.中国</a></li>

+					<li><a href="http://中国创业投资网.中国" target="_blank">中国创业投资网.中国</a></li>

+					<li><a href="http://進邦匯理.中国" target="_blank">進邦匯理.中国</a></li>

+					<li><a href="http://中再集团.中国" target="_blank">中再集团.中国</a></li>

+					<li><a href="http://交通银行.中国" target="_blank">交通银行.中国</a></li>

+					<li><a href="http://农业银行.中国" target="_blank">农业银行.中国</a></li>

+					<li><a href="http://民生银行.中国" target="_blank">民生银行.中国</a></li>

+					<li><a href="http://招商银行.中国" target="_blank">招商银行.中国</a></li>

+					<li><a href="http://黄河银行.中国" target="_blank">黄河银行.中国</a></li>

+					<li><a href="http://周口市商业银行.中国" target="_blank">周口市商业银行.中国</a></li>

+					<li><a href="http://金融快线.中国" target="_blank">金融快线.中国</a></li>

+					<li><a href="http://农信银.中国" target="_blank">农信银.中国</a></li>

+					<li><a href="http://乐pad微博.中国" target="_blank">乐pad微博.中国</a></li>

+					<li><a href="http://联想显示器.中国" target="_blank">联想显示器.中国</a></li>

+					<li><a href="http://联想打印.中国" target="_blank">联想打印.中国</a></li>

+					<li><a href="http://联想Z流行.中国" target="_blank">联想Z流行.中国</a></li>

+					<li><a href="http://中国国际新闻网.中国" target="_blank">中国国际新闻网.中国</a></li>

+					<li><a href="http://洛阳电视台.中国" target="_blank">洛阳电视台.中国</a></li>

+					<li><a href="http://崇左新闻网.中国" target="_blank">崇左新闻网.中国</a></li>

+					<li><a href="http://超越之路.中国" target="_blank">超越之路.中国</a></li>

+					<li><a href="http://长安教育网.中国" target="_blank">长安教育网.中国</a></li>

+					<li><a href="http://唐密茶道.中国" target="_blank">唐密茶道.中国</a></li>

+					<li><a href="http://雷峰陪练.中国" target="_blank">雷峰陪练.中国</a></li>

+					<li><a href="http://考研.中国" target="_blank">考研.中国</a></li>

+					<li><a href="http://世界大学城.中国" target="_blank">世界大学城.中国</a></li>

+					<li><a href="http://路正驾校.中国" target="_blank">路正驾校.中国</a></li>

+					<li><a href="http://比特威.中国" target="_blank">比特威.中国</a></li>

+					<li><a href="http://吉林省农业科学院.中国" target="_blank">吉林省农业科学院.中国</a></li>

+					<li><a href="http://普通话审音.中国" target="_blank">普通话审音.中国</a></li>

+					<li><a href="http://童帅国际教育.中国" target="_blank">童帅国际教育.中国</a></li>

+					<li><a href="http://成功之钥.中国" target="_blank">成功之钥.中国</a></li>

+					<li><a href="http://西安理工大学.中国" target="_blank">西安理工大学.中国</a></li>

+					<li><a href="http://贵阳电脑学校.中国" target="_blank">贵阳电脑学校.中国</a></li>

+					<li><a href="http://黑龙江省实验中学.中国" target="_blank">黑龙江省实验中学.中国</a></li>

+					<li><a href="http://浙江艺术职业学院.中国" target="_blank">浙江艺术职业学院.中国</a></li>

+					<li><a href="http://萃忆学堂.中国" target="_blank">萃忆学堂.中国</a></li>

+					<li><a href="http://闽南科技学院.中国" target="_blank">闽南科技学院.中国</a></li>

+					<li><a href="http://普通话语音.中国" target="_blank">普通话语音.中国</a></li>

+					<li><a href="http://鞍山师范大学.中国" target="_blank">鞍山师范大学.中国</a></li>

+					<li><a href="http://北京电影学院.中国" target="_blank">北京电影学院.中国</a></li>

+					<li><a href="http://成都理工大学.中国" target="_blank">成都理工大学.中国</a></li>

+					<li><a href="http://东北大学.中国" target="_blank">东北大学.中国</a></li>

+					<li><a href="http://赣南师范学院.中国" target="_blank">赣南师范学院.中国</a></li>

+					<li><a href="http://广州大学.中国" target="_blank">广州大学.中国</a></li>

+					<li><a href="http://河北大学.中国" target="_blank">河北大学.中国</a></li>

+					<li><a href="http://河北科技师范学院.中国" target="_blank">河北科技师范学院.中国</a></li>

+					<li><a href="http://河南农业大学.中国" target="_blank">河南农业大学.中国</a></li>

+					<li><a href="http://江西师范大学.中国" target="_blank">江西师范大学.中国</a></li>

+					<li><a href="http://辽宁大学.中国" target="_blank">辽宁大学.中国</a></li>

+					<li><a href="http://南昌大学.中国" target="_blank">南昌大学.中国</a></li>

+					<li><a href="http://南京理工大学.中国" target="_blank">南京理工大学.中国</a></li>

+					<li><a href="http://青岛大学.中国" target="_blank">青岛大学.中国</a></li>

+					<li><a href="http://山东大学.中国" target="_blank">山东大学.中国</a></li>

+					<li><a href="http://汕头大学.中国" target="_blank">汕头大学.中国</a></li>

+					<li><a href="http://上海交通大学.中国" target="_blank">上海交通大学.中国</a></li>

+					<li><a href="http://首都经济贸易大学.中国" target="_blank">首都经济贸易大学.中国</a></li>

+					<li><a href="http://四川文理学院.中国" target="_blank">四川文理学院.中国</a></li>

+					<li><a href="http://天津大学.中国" target="_blank">天津大学.中国</a></li>

+					<li><a href="http://五邑大学.中国" target="_blank">五邑大学.中国</a></li>

+					<li><a href="http://百色学院.中国" target="_blank">百色学院.中国</a></li>

+					<li><a href="http://北京化工大学.中国" target="_blank">北京化工大学.中国</a></li>

+					<li><a href="http://大连理工大学.中国" target="_blank">大连理工大学.中国</a></li>

+					<li><a href="http://福建医科大学.中国" target="_blank">福建医科大学.中国</a></li>

+					<li><a href="http://广东工业大学.中国" target="_blank">广东工业大学.中国</a></li>

+					<li><a href="http://海南师范大学.中国" target="_blank">海南师范大学.中国</a></li>

+					<li><a href="http://淮海工学院.中国" target="_blank">淮海工学院.中国</a></li>

+					<li><a href="http://辽宁对外经贸学院.中国" target="_blank">辽宁对外经贸学院.中国</a></li>

+					<li><a href="http://青海师范大学.中国" target="_blank">青海师范大学.中国</a></li>

+					<li><a href="http://山东农业大学.中国" target="_blank">山东农业大学.中国</a></li>

+					<li><a href="http://上海财经大学.中国" target="_blank">上海财经大学.中国</a></li>

+					<li><a href="http://上海中医药大学.中国" target="_blank">上海中医药大学.中国</a></li>

+					<li><a href="http://首都师范大学.中国" target="_blank">首都师范大学.中国</a></li>

+					<li><a href="http://塔里木大学.中国" target="_blank">塔里木大学.中国</a></li>

+					<li><a href="http://西安电子科技大学.中国" target="_blank">西安电子科技大学.中国</a></li>

+					<li><a href="http://清华大学.中国" target="_blank">清华大学.中国</a></li>

+					<li><a href="http://大连医科大学.中国" target="_blank">大连医科大学.中国</a></li>

+					<li><a href="http://贵州大学.中国" target="_blank">贵州大学.中国</a></li>

+					<li><a href="http://哈尔滨学院.中国" target="_blank">哈尔滨学院.中国</a></li>

+					<li><a href="http://海南医学院.中国" target="_blank">海南医学院.中国</a></li>

+					<li><a href="http://黑龙江大学.中国" target="_blank">黑龙江大学.中国</a></li>

+					<li><a href="http://集美大学.中国" target="_blank">集美大学.中国</a></li>

+					<li><a href="http://南京邮电大学.中国" target="_blank">南京邮电大学.中国</a></li>

+					<li><a href="http://上海大学.中国" target="_blank">上海大学.中国</a></li>

+					<li><a href="http://深圳大学.中国" target="_blank">深圳大学.中国</a></li>

+					<li><a href="http://四川大学.中国" target="_blank">四川大学.中国</a></li>

+					<li><a href="http://天津师范大学.中国" target="_blank">天津师范大学.中国</a></li>

+					<li><a href="http://西安工业大学.中国" target="_blank">西安工业大学.中国</a></li>

+					<li><a href="http://北华大学.中国" target="_blank">北华大学.中国</a></li>

+					<li><a href="http://防灾科技学院.中国" target="_blank">防灾科技学院.中国</a></li>

+					<li><a href="http://甘肃农业大学.中国" target="_blank">甘肃农业大学.中国</a></li>

+					<li><a href="http://广西师范学院.中国" target="_blank">广西师范学院.中国</a></li>

+					<li><a href="http://哈尔滨医科大学.中国" target="_blank">哈尔滨医科大学.中国</a></li>

+					<li><a href="http://河北科技大学.中国" target="_blank">河北科技大学.中国</a></li>

+					<li><a href="http://内蒙古大学.中国" target="_blank">内蒙古大学.中国</a></li>

+					<li><a href="http://宁夏大学.中国" target="_blank">宁夏大学.中国</a></li>

+					<li><a href="http://山东财经大学.中国" target="_blank">山东财经大学.中国</a></li>

+					<li><a href="http://陕西师范大学.中国" target="_blank">陕西师范大学.中国</a></li>

+					<li><a href="http://上海对外贸易学院.中国" target="_blank">上海对外贸易学院.中国</a></li>

+					<li><a href="http://四川警察学院.中国" target="_blank">四川警察学院.中国</a></li>

+					<li><a href="http://西华大学.中国" target="_blank">西华大学.中国</a></li>

+					<li><a href="http://许昌学院.中国" target="_blank">许昌学院.中国</a></li>

+					<li><a href="http://扬州大学.中国" target="_blank">扬州大学.中国</a></li>

+					<li><a href="http://中国矿业大学.中国" target="_blank">中国矿业大学.中国</a></li>

+					<li><a href="http://中南大学.中国" target="_blank">中南大学.中国</a></li>

+					<li><a href="http://西安理工大学.中国" target="_blank">西安理工大学.中国</a></li>

+					<li><a href="http://烟台大学.中国" target="_blank">烟台大学.中国</a></li>

+					<li><a href="http://漳州师范学院.中国" target="_blank">漳州师范学院.中国</a></li>

+					<li><a href="http://郑州大学.中国" target="_blank">郑州大学.中国</a></li>

+					<li><a href="http://中国农业大学.中国" target="_blank">中国农业大学.中国</a></li>

+					<li><a href="http://中国医药大学.中国" target="_blank">中国医药大学.中国</a></li>

+					<li><a href="http://西安邮电学院.中国" target="_blank">西安邮电学院.中国</a></li>

+					<li><a href="http://新疆大学.中国" target="_blank">新疆大学.中国</a></li>

+					<li><a href="http://云南师范大学.中国" target="_blank">云南师范大学.中国</a></li>

+					<li><a href="http://中国政法大学.中国" target="_blank">中国政法大学.中国</a></li>

+					<li><a href="http://西昌学院.中国" target="_blank">西昌学院.中国</a></li>

+					<li><a href="http://新疆农业大学.中国" target="_blank">新疆农业大学.中国</a></li>

+					<li><a href="http://浙江万里学院.中国" target="_blank">浙江万里学院.中国</a></li>

+					<li><a href="http://重庆大学.中国" target="_blank">重庆大学.中国</a></li>

+					

+				</ul>

+			</div>

+		</div>

+		<div class="open">

+		</div>

+		<div class="container">

+			<h1 class="Chinese-domain">中文域名简介</h1>

+			<p class="Chinese-domain-content">

+				“中国域名”是中文域名的一种,特指以“中国”为后缀的中文域名,是我国域名体系和全球互联网域名体系的重要组成部分。“中国”是在全球互联网上代表中国的中文顶级域名,于2010年7月正式纳入全球互联网域名体系,全球互联网域名体系,全球网民可通过联网计算机在世界任何国家和地区实现无障碍访问。“中国”域名在使用上和 .CN,相似属于互联网上的基础服务,基于域名可以提供WWW.EMAIL FTP等应用服务。

+			</p>

+		</div>

+		<div class="footer">

+			<p>ICP备案编号:京ICP 备09112257号-68  版权所有中国互联网信息中心</p>

+		</div>

+	</body>

+	<script>

+	$("#headTip").hide()

+	var hostname = window.location.hostname || "";

+

+	var tips =  "您所访问的域名 <font size='' color='#ff0000'>" + hostname +"</font> 无法到达,您可以尝试重新访问,或使用搜索相关信息"

+	if (hostname != "导航.中国") {

+		$("#headTip").html(tips);

+		$("#headTip").delay(500).slideDown();

+		$('#headTip').delay(5000).slideUp();

+	}

+	</script>

+</html>

diff --git a/spec/services/fetch_link_card_service_spec.rb b/spec/services/fetch_link_card_service_spec.rb
new file mode 100644
index 000000000..5d72d40b6
--- /dev/null
+++ b/spec/services/fetch_link_card_service_spec.rb
@@ -0,0 +1,14 @@
+require 'rails_helper'
+
+RSpec.describe FetchLinkCardService do
+  before do
+    stub_request(:get, 'http://example.xn--fiqs8s/').to_return(request_fixture('idn.txt'))
+  end
+
+  it 'works with IDN URLs' do
+    status = Fabricate(:status, text: 'Check out http://example.中国')
+
+    FetchLinkCardService.new.call(status)
+    expect(a_request(:get, 'http://example.xn--fiqs8s/')).to have_been_made
+  end
+end