2015-04-07 2 views
1

Я пишу программу в bash и хочу использовать curl для отображения содержимого веб-сайта. Ссылка на сайт http://examplewebsite.com/example.php?pass=hello hello: world. Использование:Curl for ":" in web url

curl http://examplewebsite.com/example.php?pass=hello hello:world

Однако это возвращает: Couldn't resolve host 'hello:world'

+0

Http: // php.net/urlencode – IMSoP

ответ

2

Ошибка была вызвана пробелом между «привет» и «миром», что привело к тому, что bash разделил ссылку на два разных токена, которые завивались как две разные ссылки.

Вы должны, по крайней мере, указать параметры URL-адреса, как это сделали взрывательные таблетки.

Однако, это не очень хороший способ передать аргументы прямо так, потому что вы можете столкнуться с некоторыми символами, которым требуется экранирование (пространство является одним из них, но, похоже, оно обрабатывается автоматически с помощью curl).

Чтобы сделать это, вы можете использовать --data-urlencode:

curl "http://examplewebsite.com/example.php" --data-urlencode "pass=hello hello:world" --get 

(--data-urlencode переключает метод POST вместо GET, так что вы можете использовать --get, чтобы переключиться обратно в GET)

+0

Спасибо, мне удалось заставить его работать сейчас. – Greenfrogs

+0

Я только что закончил с помощью 'curl --data' с сообщением – Greenfrogs

+0

« Это не очень хороший способ передать аргументы прямо так ». На самом деле это не только плохой стиль; это просто неправильно. RFC 3986 не допускает пробелов в URI. В зависимости от реализации он может работать, но определенно нет гарантии (я считаю). – 4ae1e1

2

Просто оберните URL в строке:

curl "http://examplewebsite.com/example.php?pass=hello hello:world" 

Ваш пробег может изменяться, чтобы работает ли это правильно или нет, так вы также должны URL-кодировать значение:

curl "http://examplewebsite.com/example.php?pass=hello%22hello%3Aworld" 
+0

Спасибо, однако первый пример не работает. – Greenfrogs