diff --git a/app/controllers/api/push_controller.rb b/app/controllers/api/push_controller.rb index f2ddfd969ee54de5ec87760bc47ec5cc43d05b70..bc547d6530b80090b65e414e11961ff92cd950b9 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 c98a5f45f5dc62bd4daf7b957a7a6733ba2ebc35..9b28a9455a0adc81baa3ad0245ea14a724de134a 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 f26c943d25670373a790549d124145e6c35cb00e..3bddfba7c2825ef6f19d80599627922dfc1a9248 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 084b17f43dc04c308a703b4a751d4bcbeb1ef02e..eebcf90b8f643e011c7da6378ec1db1b12b8d42e 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 baf5c3973bd46515b0dd4c27051a9d4f8cd3d015..6c2ba70f769409a90a43273f0f588c6ea918bac8 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 181e01674f34d97c5d1be35087be10876b38e127..a43c76c77ce683de3656141c250f1a26c01318d7 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 31f9be194eb699b2e359da1ef2975ab876bee8ff..f74a0d34dc2ccc65fc93cfe727fc5035e392a0d7 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 50ffc47c66ba9c2913a1bdf578b372df256c4a87..7c2fb0ef12fbc30ef748a572f3c97574f98d4b64 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 e2d18572312c07806d4b915392433f53bcd4d958..c666961ad2808d1ef09c86e0958f17bf4073b2a1 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 2d7414bc0bafa62f45ab67aa50ccfbc056b350e5..fbf983093ab0d916c81d30d957fe2df9b4e2baab 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 98d92f6300c6a1eb4915eb90f4e98cc66bdebd73..d002b9130e49c58f82dbd1f7243fff72527698ff 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 805ca5a273569dd3f85151a0762c59168710f56e..410e805d345bbc22f0da82ef73c57c00b7b71e4e 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 bf36e3fa6f5ae30809318bbd72ca32087ebd0ee4..3642b4eca10920876c4dd6d57d0f47f2b6e4a121 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 4a5c4ef3fffabde357d25edded1fed2118de239f..f39560d90aca48f0d5a783b7e60eee3787c85e0b 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 b440f7986e634f9d9d96d6d6dd5bd8efcd9b0d40..f645b1e24d0189b4d387970135c667331ca90196 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 0000000000000000000000000000000000000000..3c76c59c05cf93e82b3d1d4fc8a13eec807ca9f2 --- /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 0000000000000000000000000000000000000000..5d72d40b6204e267e3f0a3e3627329760106d92d --- /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