Как я могу закодировать URL-адрес для передачи знака процента (%) в Swift? - PullRequest
3 голосов
/ 07 мая 2020

Для работы мне нужен такой URL:

https://somehost.gov/api/wtk_download.csv?api_key=DEMO_KEY&wkt=POINT (- 104.23828125% 252039.90973623454) &attributes=power&names=2009&interval=60&full_name=SampleUser&email=sample@email.com&affiliation=TestOrganization&reason=Dev

Код I. используется для создания URL-адреса:

let wktStr: String = "POINT("+formattedX+"%"+formattedY+")"
var components = URLComponents()
components.scheme = "https"
components.host = "somehost.gov"
components.path = "/api/wtk_download.csv"
components.queryItems = [
    URLQueryItem(name: "api_key", value: "DEMO_KEY"),
    URLQueryItem(name: "wkt", value: wktStr),
    URLQueryItem(name: "attributes", value: "power"),
    URLQueryItem(name: "names", value: yearString),
    URLQueryItem(name: "interval", value: "60"),
    URLQueryItem(name: "full_name", value: "SampleUser"),
    URLQueryItem(name: "email", value: "sample@email.com"),
    URLQueryItem(name: "affiliation", value: "TestOrganization"),
    URLQueryItem(name: "reason", value: "Dev")

]

let url = components.url
print(url!)
print(url!.absoluteURL)

Выводит:

https://somehost.gov/api/wtk_download.csv?api_key=DEMO_KEY&wkt=POINT (- 104.23828125% 252039.90973623454) &attributes=power&names=2009&interval=60&full_name=SampleUser&email=sample@email.com&affiliation=TestOrganization&reason=Dev

Хост сервера выдает ошибку, потому что POINT(-104.23828125%252039.90973623454) имеет %25 вместо %.

Как я могу сгенерировать элемент POINT(-104.23828125%2039.90973623454), который имеет только %?

1 Ответ

1 голос
/ 08 мая 2020

Похоже, вы пытаетесь использовать Wind Toolkit Data API .

В одном из их примеров запросов у них есть параметр запроса, который они показывают, выглядит следующим образом:

wkt=POINT(-104.23828125%2039.90973623453719)

Этот %20 на самом деле просто URL-кодированный пробел.

(Это это сбивает с толку, как они показывают URL -кодированное значение для параметра wkt, но не для других параметров, значения которых содержат пробелы вроде full_name=Sample User или affiliation=Test Organization, поэтому понятно, откуда взялась путаница.)

В любом случае, чтобы исправить проблему , просто замените символ % в вашем wktStr пробелом:

let wktStr: String = "POINT("+formattedX+" "+formattedY+")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...