Как передать параметры в url get запросом?
Есть ли питонячий способ, как передать параметры в стандартной библиотеке urllib? Ссылка идет такой:
https://worldoftanks.ru/wgris/hof/achievements/full/?lang=ru&page=1&page_size=20&battles_count=100&tier_group=1&time_slice=2018-11&stat_type=sbr
Пока что я так реализовал:
from urllib.request import urlopen from urllib.parse import urlencode params = < 'lang': 'ru', 'page': '1', 'page_size': '20', 'battles_count': '100', 'tier_group': '1', 'time_slice': '2018-11', 'stat_type': 'sbr', >r = urlopen("https://worldoftanks.ru/wgris/hof/achievements/full?" + urlencode(params)) print(r)
Но он выдает исключение urllib.error.HTTPError: HTTP Error 404: Not Found что у меня не так?
GET-запрос
Использование GET-запроса – простейший способ запуска бизнес-процесса из внешней системы. Все, что нужно для создания такого запроса – это составить ссылку вида:

Рис. 1. Схема HTTP-GET запроса, при помощи которого выполняется запуск бизнес-процесса ELMA.
К адресу сервера добавляется стандартный путь /Processes/ProcessHeader/RunByWebQuery/. После последнего символа / указываются параметры запроса. Первое, что требуется указать – это токен бизнес-процесса. По сути, правильно указанные адресная часть и токен уже позволяют использовать эту ссылку для запуска бизнес-процесса. В этом случае он будет запущен со стандартными, определенными по умолчанию, параметрами. То есть, результат будет такой же, как при запуске процесса через веб-приложение системы ELMA.
Если же требуется указать некоторые дополнительные значения параметров бизнес-процесса, то их нужно перечислить в тексте ссылки после токена. Токен и параметры в ссылке отделяются вопросительным знаком (?); между собой параметры отделяются знаком амперсанда (&). Параметр указывается в следующем формате: Имя_параметра=Значение_параметра.
Полученная ссылка может быть запущена с любого устройства. В простейшем случае, ее достаточно ввести вручную в адресной строке браузера компьютера.
Данный запрос приведет к запуску бизнес-процесса с токеном 995ea844-74a8-413b-96be-bc92462eff85 на сервере ELMA, расположенном на http://elma.someorg.ru. При этом бизнес-процесс будет запущен с определенными стартовыми параметрами. Перед началом выполнения процесса в его контекст будет загружено пять переменных: Name, Surname, Fathername, Age, Partner.
При необходимости передать в параметрах текст с пробелами вместо пробела необходимо использовать символ «+» или символьный код «%20». Принципиальной разницы между ними нет.
Если же необходимо передать символ «+», то вместо него нужно передавать символьный код «%2B».
Возможность запуска бизнес-процессов при помощи GET-запроса имеется только при условии, что процесс был опубликован с корректно сформированным токеном и установленными флажками Запуск из внешних систем и Веб-запрос (GET) в блоке Варианты запуска процесса (рис. 2).

Рис. 2. Настройки публикации процесса для использования GET-запроса
В HTTP-GET запросе передаются только параметры, которые могут быть введены в строковом виде, то есть целые и дробные числа, строки, текст, даты, идентификаторы объектов. Такие параметры, как графические изображения и файлы, не могут быть переданы через HTTP-GET запрос.
Laravel по-русски
Русское сообщество разработки на PHP-фреймворке Laravel.
- Форум
- » Laravel 5.x
- » Можно ли добавить get параметры к запросу в контроллере
Страницы 1
#1 24.04.2017 16:01:03
Konstantin_Matyashevskiy Сообщений: 5
Можно ли добавить get параметры к запросу в контроллере
Необходимо интегрировать сторонний сервис в сайт на laravel. Есть параметры, сохраненные в сессии. Эти параметры необходимо передать в get параметрах, а сторонний сервис сам с ними производит свои действия. Каким образом можно передать параметры из сессии в гет параметр? Есть ли такой функционал?
Как достать параметры из сессии — это понятно, но не могу найти, как добавить параметры в get? Или это надо делать еще в роуте?
Не в сети 24.04.2017
#2 24.04.2017 17:08:49
AlexeyMezenin +483 Топ 10%
Мастер
Писарь Сообщений: 783 Статей: 3
Re: Можно ли добавить get параметры к запросу в контроллере
Не понятно про «как добавить параметры в get». Покажи код, который этот get посылает.
Изменено AlexeyMezenin (24.04.2017 17:09:04)
Не в сети 03.03.2016
#3 24.04.2017 17:25:47
Konstantin_Matyashevskiy Сообщений: 5
Re: Можно ли добавить get параметры к запросу в контроллере
Вот функция из контроллера:
public function getDoc(Request $request)
$loan = $request->session()->get(‘loan’);
if ($loan != null) foreach($loan as $kl => $vl) $request->input($kl, $vl);
>
>
$contact_info = $request->session()->get(‘contact_info’);
if ($contact_info != null) foreach($contact_info as $kc => $vc) $request->input($kc, $vc);
>
>
return view(‘docs/get’, [
‘doc’ => $request->route(‘doc’)
]);
>
В результате в $request->input ничего нет. Да и вообще не знаю, поможет ли это или нет. Делаю первые шаги в laravel.
Вопрос заключается в том, как в контроллере добавить get параметры? До контроллера get параметров нет. Надо их вытащить из сессии и поместить в url. То есть в итоге из url типа http://site.ru/doc/name_doc должно получиться эмуляция строки типа http://site.ru/doc/name_doc?p=0&p1=1&p2=2 и т.п.
Может быть, использовать redirect для этого?
Изменено Konstantin_Matyashevskiy (24.04.2017 17:34:48)
Не в сети 24.04.2017
#4 24.04.2017 17:38:33
AlexeyMezenin +483 Топ 10%
Мастер
Писарь Сообщений: 783 Статей: 3
Re: Можно ли добавить get параметры к запросу в контроллере
Спасибо, теперь понятно.
Если к контроллеру такой путь надо сделать http://site.ru/doc/name_doc?p=0&p1=1&p2=2, то называешь маршрут как-нибудь, например get-doc:
Route::get('name_doc', ['as' => 'get-doc', 'uses' => 'SomeController@getDoc'])
И используешь помощник route() вот так:
route('get-doc', ['p' => 0, 'p1' => 1, 'p2' => 2])
Потом в самом методе можно ловить GET параметры помощником request:
$p = request('p')
PS: Вместо этой бороды $request->session()->get(‘contact_info’) используй просто session(‘contact_info’)
Изменено AlexeyMezenin (24.04.2017 17:39:29)
HTTP-запрос методом GET.

Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.
Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.

Если у вас есть желание погрузиться в тему серверного программирования глубже, все мои уроки здесь.
Браузер передаст серверу примерно следующую информацию:
GET / HTTP/1.1 Host: site.ru User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: wp-settings Connection: keep-alive
Запрос состоит из двух частей:
1. строка запроса (Request Line)
2. заголовки (Message Headers)
Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию. Это можно делать с помощью специальных GET параметров.
Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:
имя_параметра1=значение_параметра1& имя_параметра2=значение_параметра2&…Разделителем между параметрами служит знак «&».
К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:
http://site.ru/page.php?name=dima&age=27
Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.
Вот пример, как это можно сделать на языке PHP.
"; echo "Ваш возраст: " . $_GET["age"] . "
"; ?>
Конструкция $_GET[«имя_параметра»] позволяет выводить значение переданного параметра.
В результате выполнения этого кода в браузере выведется:
Ваше имя: dima Ваш возраст: 27
Кстати, переходя по какой-либо ссылке, которая оформлена в HTML вот так:
мы тоже выполняем запрос к серверу методом GET.
Все мои уроки по серверному программированию здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через: