我只是想从API获取一个回复,其中包含我在我的uri字符串中指定的某些字段,但我一直收到InvalidURIError。我作为最后的手段来到这里,花了好几个小时试图调试它。 我已经尝试过对它使用URI.encode()方法,但只会出现同样的错误。
这是我的代码:
url = params[:url]
uri = URI('https://graph.facebook.com/v2.3/?id=' + url + '&fields=share,og_object{id,url,engagement}&access_token=' + CONFIG['fb_access_token'])
req = Net::HTTP::Post.new(uri.path)
req.set_form_data('fields' => 'og_object[engagement]','access_token' => CONFIG['fb_access_token'])
res = Net::HTTP.new(uri.host, uri.port)
res.verify_mode = OpenSSL::SSL::VERIFY_NONE
res.use_ssl = true
response = nil
res.start do |http|
response = http.request(req)
end
response = http.request(req)
output = ""
output << "#{response.body} <br />"
return output
我收到的错误:
URI::InvalidURIError - bad URI(is not URI?): https://graph.facebook.com/v2.3/?id=http://www.wikipedia.org&fields=share,og_object{id,url,engagement}&access_token=960606020650536|eJC0PoCARFaqKZWZHdwN5ogkhfs
我此时已经筋疲力尽,所以如果我遗漏了任何重要信息,请告诉我,我会尽快回复。谢谢!
答案 0 :(得分:2)
问题是你只是将字符串转储到你的URI而不先逃避它们。
由于您正在使用Sinatra,因此您可以使用SELECT DISTINCT EmpID, First, Last FROM Table WHERE EmpID NOT IN
(
SELECT EmpID FROM Table WHERE MadePayment='Yes'
)
构建URI的查询组件,并使用正确转义的值:
Rack::Utils.build_query