создание сложного URL - PullRequest
       8

создание сложного URL

0 голосов
/ 12 января 2011

Я пытаюсь получить доступ к Dreamhost API для отправки почты.

API ожидает URL-адрес, содержащий домены и фактическое содержание электронной почты

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
 # }
}

Когда я анализирую URL, я получаю сообщение об ошибке

плохой URI (не URI?)

URL содержит сам URL из списка и сообщения, и я предполагаю, что это вызывает проблему. Я понятия не имею, как это решить. CGI escpae была предложена, но это, кажется, преобразует пробел в +

Кто-то знает, как это решить?

Спасибо

1 Ответ

2 голосов
/ 12 января 2011

После этой строки

url = domain + "&key=#{key}&cmd=#{command}&listname=#{mailing}&domain=#{domain}&listname=#{listname}&message=#{message}"

URL выглядит как:

"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. Вот почему исключение генерируется.

Одно быстрое исправление заключается в следующем:

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 используется для экранирования неформатированных строк.

Надеюсь, это поможет.

...