我正在尝试访问Dreamhost API以发送邮件。
API需要包含域名和实际电子邮件内容的网址
domain = 'https://api.dreamhost.com/' key = "dq86ds5qd4sq" command = "announcement_list-post_announcement" mailing = "mailing" domain = "domain.nl" listname = "mailing Adventure"<mailling@domain.nl>" message = '<html>html here</html>' url = domain + "&key=#{key}&cmd=#{command}&listname=#{mailing}&domain=#{domain}&listname=#{listname}&message=#{message}" uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == "https" # enable SSL/TLS http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.start { # http.request_get(uri.path) {|res| # print res.body # } }
当我解析网址时出现错误
错误的URI(不是URI?)
url在listname和message中包含url本身,我认为这会导致问题。我不知道如何解决这个问题。已经提出了CGI escpae,但似乎将白色空间转换为+。
有人知道如何解决这个问题吗?
由于
答案 0 :(得分:2)
此行之后
url = domain + "&key=#{key}&cmd=#{command}&listname=#{mailing}&domain=#{domain}&listname=#{listname}&message=#{message}"
网址出现为:
"domain.nl&key=dq86ds5qd4sq&cmd=announcement_list-post_announcement&listname=mailing&domain=domain.nl&listname=mailing Adventure<mailling@domain.nl>&message=<html>html here</html>"
这不是一个合适的网址。这就是生成异常的原因。
一个快速解决方法如下:
url = "http://" + domain + "/?key=#{key}&cmd=#{command}&listname=#{mailing}&domain=#{domain}&listname=#{URI.escape(listname)}&message=#{URI.escape(message)}"
uri = URI.parse(url)
URI.escape 用于转义未格式化的字符串。
希望这有帮助。