创建复杂的网址

时间:2011-01-12 10:58:35

标签: ruby dreamhost

我正在尝试访问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,但似乎将白色空间转换为+。

有人知道如何解决这个问题吗?

由于

1 个答案:

答案 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 用于转义未格式化的字符串。

希望这有帮助。