我正在Rails应用程序中创建一个API,但是我在编码方面遇到了一些问题,所以看起来是这样的。实际上,我不确定实际的错误是什么。我写了一个模块,里面有两个类。其中一个用于获取域的一些DNS记录。当我通过self实例化类并调用一个方法时,它工作得很好,但是当我在我的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一样查询我的api
lvh.me域是我使用的东西,所以我可以在本地使用子域。有人能看出错误可能是什么吗,或者对我能做什么有什么建议?
更新
我发现,尝试不同的领域,抛出不同的错误。google.com抛出:"\xF2" from ASCII-8BIT to UTF-8 facebook.com抛出:"\xAD" from ASCII-8BIT to UTF-8 rubyonrails.org thows:"\xC0" from ASCII-8BIT to UTF-8
发布于 2015-06-15 10:12:45
所以,经过几个小时的努力找出问题所在,我已经解决了这个问题。
问题在于我试图将散列编码为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
发布于 2015-06-18 19:48:21
它似乎也与从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\"]}}}"https://stackoverflow.com/questions/30802024
复制相似问题