我正在Rails应用程序中创建一个API,但我在编码方面遇到了一些麻烦,所以看起来如此。我实际上确实不确定实际的错误是什么。我编写了一个模块,其中包含两个类。其中一个用于获取域的DNS记录。当我通过它实例化类,并调用一个方法它工作得很好,但是当我在我的Rails应用程序中运行它时,我被抛出一个错误说"\x90" from ASCII-8BIT to UTF-8
这有点来自我的课程
#
# Class initializer to set instance variable with domain
#
def initialize(domain)
@domain = domain
end
#
# Generates hash to be used in other methods
# @returns a hash with usefull info and made ready for later input
#
def generate_hash
hash = {
'timestamp' => Time.now.to_i,
'credits_remaining' => 123,
'response' => {
'domain' => @domain,
'records' => {}
}
}
return hash
end
#
# Get A Records for a domain
# @returns JSON formatted hash
#
def get_a_records
data = self.generate_hash
Resolv::DNS.open do |dns|
ress = dns.getresources @domain, Resolv::DNS::Resource::IN::A
p = ress.map { |r| r.address }
data['response']['records']['a'] = p
end
return data.to_json
end
从我的控制器:
require 'domainapi'
class CallsController < ApplicationController
def index
render json: {'status': 'OK'}
end
def dns
dns = DomainAPI::Dns.new(params[:domain])
response = dns.get_a_records
render json: response
end
end
我班上的索引方法运行得很好。我像这样http://api.lvh.me:3000/v1/dns/a/stackoverflow.com
lvh.me
域名是我使用的,因此我可以在本地使用子域名。
有人可以看到可能出现的错误,或者对我能做什么有建议吗?
更新
我发现尝试不同的域名会引发不同的错误。
google.com抛出:
"\xF2" from ASCII-8BIT to UTF-8
facebook.com抛出:
"\xAD" from ASCII-8BIT to UTF-8
rubyonrails.org:
"\xC0" from ASCII-8BIT to UTF-8
答案 0 :(得分:0)
它似乎与您从Resolv收到的原始地址的格式有关。你为地址的每个八位字节得到一个字节,所以我认为这也可以修复错误:
p = ress.map { |r| r.address.address.chars.map { |b| b.unpack 'C' }.join '.' }
虽然不确定它是否有帮助。
示例输出:
> Resolv::DNS.open do |dns|
* ress = dns.getresources 'www.example.com', Resolv::DNS::Resource::IN::A
* p = ress.map {|r| r.address.address.chars.map {|b| b.unpack 'C' }.join '.' }
* data['response']['records']['a'] = p
* end
...
> data.to_json
=> "{\"response\":{\"records\":{\"a\":[\"93.184.216.34\"]}}}"
答案 1 :(得分:-1)
因此,在数小时后试图找出问题所在,我已经想到了这一点。
问题是我尝试将哈希编码为JSON的部分。显然Rails或我的应用程序不理解.to_json
方法,因此我必须使用此处所述的JSON.generate(data)
序列化:http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#module-JSON-label-Generating+JSON