- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
std::string makeFormContent(const std::string & album,
const std::wstring & filename,
const std::string & boundary)
{
static const std::string DELIM = "\r\n";
std::ostringstream ss;
std::ifstream file(filename, std::ios::binary);
ss << boundary << DELIM;
ss << "Content-Disposition: form-data; name=\"album\"" << DELIM << DELIM;
ss << album << DELIM;
ss << boundary << DELIM;
ss << "Content-Disposition: form-data; name=\"image\"; filename=\"image\"" << DELIM << DELIM;
ss << file.rdbuf() << DELIM;
ss << boundary << DELIM << "--";
return ss.str();
}
Заебали. Куча HTTP-либ под кресты, а банально сделать POST-запрос с multipart/form-data без кучи ебли нельзя. Приходится самому составлять, лол.
Именно поэтому я за «requests.post(url, data=data, files=files)».
BEKTOPHblu_nETyX 03.07.2019 00:52 # 0
TEH3OPHblu_nemyx 03.07.2019 01:07 # +1
TEH3OPHblu_nemyx 03.07.2019 15:25 # 0
bormand 03.07.2019 15:26 # 0
TEH3OPHblu_nemyx 04.07.2019 18:40 # 0
bormand 04.07.2019 19:02 # +2
TEH3OPHblu_nemyx 04.07.2019 19:48 # +1
В то время, когда космические корабли бороздят Большой театр, когда выходят новые версии TLS с новыми протоколами шифрования и подписи, формы для отправки файлов собираются таким алхимическим способом???
gost 04.07.2019 20:06 # +2
guest8 05.07.2019 01:32 # −999
bormand 05.07.2019 01:48 # +1
bormand 05.07.2019 01:52 # +1
TEH3OPHblu_nemyx 05.07.2019 02:20 # 0
Например, содержимое файла ABC. Если мы возьмём в качестве границы ABCA, то получим: Встретив второй раз ABCA, парсер решит, что это конец. А если добавим любой другой символ, то облома не будет:
gost 05.07.2019 03:34 # +1
bormand 04.07.2019 20:09 # +2
Более того, вся электроника построена на вероятности. Метастабильность при передаче данных между разными частотными доменами убрать никак нельзя, можно только загнать вероятность в угол и делать вид, что всё заебись... И что один случай за миллиарды лет никто не заметит.
guest8 05.07.2019 01:27 # −999
bormand 05.07.2019 01:30 # 0
guest8 05.07.2019 01:31 # −999
Desktop 05.07.2019 02:01 # 0
guest8 04.07.2019 20:15 # −999
bormand 04.07.2019 20:16 # +2
TEH3OPHblu_nemyx 04.07.2019 20:45 # 0
bormand 04.07.2019 20:46 # +2
guest8 04.07.2019 20:59 # −999
gost 04.07.2019 21:26 # 0
bormand 04.07.2019 21:30 # +1
bormand 04.07.2019 21:35 # 0
gost 04.07.2019 23:50 # 0
TEH3OPHblu_nemyx 04.07.2019 23:51 # +1
gost 05.07.2019 00:12 # 0
bormand 04.07.2019 23:57 # +1
bormand 05.07.2019 00:03 # +1
gost 05.07.2019 00:13 # 0
bormand 05.07.2019 00:17 # 0
https://en.wikipedia.org/wiki/Range_encoding
gost 05.07.2019 00:38 # 0
bormand 05.07.2019 00:44 # +1
bormand 05.07.2019 00:58 # +1
> 150 символов
Ну вот смотри 150 символов по log2(250) бит это 1194 с лишним бита аля 149 байт (если округлить вниз). Куда плотнее то? И это на любых данных, тут не будет никаких ограничений на "нули не реже 30".
gost 05.07.2019 03:26 # 0
bormand 05.07.2019 05:16 # +1
Напротив, арифметическое кодирование сбрасывает оковы битоёбства!
Зачем, к примеру, тратить на число от 0 до 5 целых три бита, если достаточно 2.59?
bormand 05.07.2019 05:28 # +1
Долой неделимость битов!
bormand 05.07.2019 02:07 # +1
А если не округлять, то 149 байт и целых 2 бита, в которые ты сможешь положить что-то полезное!
bormand 05.07.2019 05:32 # 0
Даже не 2, а 2.87!
bormand 05.07.2019 00:34 # 0
bormand 05.07.2019 00:38 # 0
bormand 05.07.2019 06:01 # +1
> не более 30
Но ведь запрещённых символов 6, а не 8? Поэтому из 7.96 бит мы потратим 2.58 и у нас останется 5.38 бит чтобы записать расстояние от 0 до 40!
Для этого достаточно заюзать (dist * 6) + code вместо (dist << 3) | code. Ну и ремапнуть полученное число от 0 до 245 в разрешённые символы по табличке.
gost 05.07.2019 11:33 # +1
bormand 05.07.2019 11:50 # 0
Skarn 06.07.2019 20:49 # 0
BOKCEJIbHblu_nemyx 06.07.2019 21:04 # 0
Какой анскилл )))
BOKCEJIbHblu_nemyx 06.07.2019 21:07 # +1
pike
щука, пика, копье, пик, наконечник, острие
guest8 06.07.2019 22:11 # −999
TEH3OPHblu_nemyx 06.07.2019 22:30 # 0
TEH3OPHblu_nemyx 06.07.2019 21:55 # +1
guest8 03.07.2019 01:02 # −999
TEH3OPHblu_nemyx 03.07.2019 01:14 # +3
gost 03.07.2019 07:06 # +1
Какая обработка исключений )))
bormand 03.07.2019 08:01 # +3
Bear -> bearer -> bearest.
gost 03.07.2019 09:08 # +2
PEKYPCuBHblu__nemyx 03.07.2019 11:53 # 0
guest8 03.07.2019 12:15 # −999
3.14159265 03.07.2019 14:01 # 0
bormand 03.07.2019 14:51 # +1
superhackkiller197 24.10.2019 23:43 # 0
Так что, питух, пожалуйста, не надо.
Покажи лучше что ты реально сам сделал.
guest8 24.10.2019 23:44 # −999
guest8 25.10.2019 00:43 # −999
3.14159265 03.07.2019 13:45 # 0
>restc_cpp
В кресты-бусты до сих пор не завезли удобных апи с быдлерами?
gost 03.07.2019 14:20 # +1
Багор, как есть багор!
BEKTOPHblu_nETyX 03.07.2019 14:56 # 0
gost 03.07.2019 15:02 # +4
BEKTOPHblu_nETyX 04.07.2019 00:41 # +1
Забавные чудеса крестотипизации: cтоит проебать один const и оператор применяется только первый раз, но всё успешно конпелируется, ведь запятая работает со всеми типами, и я долго не мог понять в чем дело.
Тогда почему он вообще применяется, если я написал "A a", а не "const A a"?
guest8 04.07.2019 00:43 # −999
guest8 04.07.2019 01:12 # −999
BEKTOPHblu_nETyX 04.07.2019 01:22 # 0
bormand 04.07.2019 09:55 # 0
Монадок захотелось?
BEKTOPHblu_nETyX 04.07.2019 01:01 # 0
guest8 04.07.2019 01:04 # −999
BEKTOPHblu_nETyX 04.07.2019 01:10 # 0
gost 04.07.2019 09:37 # +1
static_assert(false, "Konpelyaciya upadet na etoi stroke");
static_assert(sizeof(int) == 4); // С C++17 можно пропустить сообщение об ошибке
bormand 04.07.2019 12:33 # 0
Fluent интерфейс же.
3.14159265 04.07.2019 18:34 # +2
Зато низкоуровнево.
TEH3OPHblu_nemyx 04.07.2019 18:38 # 0
3.14159265 04.07.2019 18:50 # +2
Очевидно что высокоопитумальный код http-клиента будет завязан на конкретную Царь-машину и совершенно непортируем куда-либо ещё.
PS. Да и в целом, http — для анскилябр заедушных, не по-царски это. В нём много перепитушни анскильной.
bormand 04.07.2019 19:05 # +1
Сначала подумал, что речь о Curve25519.
guest8 04.07.2019 19:06 # −999
3.14159265 04.07.2019 20:55 # +1
bormand 04.07.2019 19:16 # +1
Прямо в порты же.
DyKaJluC 25.10.2019 21:27 # 0
RMS 25.10.2019 21:43 # 0
DyKaJluC 25.10.2019 22:02 # 0
guest8 04.07.2019 20:57 # −999
guest8 04.07.2019 18:39 # −999
guest8 25.10.2019 00:03 # −999
guest8 24.10.2019 23:45 # −999
TEH3OPHblu_nemyx 03.07.2019 01:16 # +2
https://curl.haxx.se/libcurl/c/multi-post.html
BEKTOPHblu_nETyX 03.07.2019 01:27 # 0
TEH3OPHblu_nemyx 03.07.2019 15:21 # 0
gost 03.07.2019 15:25 # −1
TEH3OPHblu_nemyx 03.07.2019 15:52 # +1
OCETuHCKuu_nemyx 03.07.2019 21:46 # 0
TEH3OPHblu_nemyx 03.07.2019 23:48 # 0
TEH3OPHblu_nemyx 03.07.2019 01:42 # 0
gost 03.07.2019 07:10 # +1
bormand 03.07.2019 14:54 # +2
Вообще странно, что в том же PHP сначала сервак полностью закачивает файл и только потом скрипт получает управление и решает, что делать с этим файлом (или вообще выбрасывает нахуй, лол).
guest8 04.07.2019 20:16 # −999
bormand 04.07.2019 20:19 # 0
3.14159265 04.07.2019 20:27 # +2
И клиент (java.net.URLConnection) и сервлеты (https://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html).
Spring только даёт обёртки: restClient (не слишком удобный) и инъекцию этих requestов в аннотированные методы.
Впрочем всё это и разные jersey умеют.
Desktop 03.07.2019 15:49 # 0
bormand 04.07.2019 09:56 # 0
bormand 04.07.2019 20:21 # +1
Desktop 04.07.2019 20:30 # 0
Уметь видимо умеют, отправляют ли надо смотреть в каждом конкретном случае
bormand 04.07.2019 20:31 # 0
Desktop 04.07.2019 20:32 # 0
bormand 04.07.2019 20:33 # 0
Desktop 04.07.2019 20:34 # 0
- Холмс, но зачем?!
bormand 04.07.2019 20:35 # 0
Desktop 04.07.2019 20:39 # 0
А я чего спросил, не повезло попасть на кровавый ъ-прайз, там коллега жаловался, что сервак работает именно вот так, как я выше написал. А они там гоняют достаточно толстые жисоны по несколько десятков мегабайт.
bormand 04.07.2019 20:41 # 0
Desktop 04.07.2019 20:43 # 0
bormand 04.07.2019 20:44 # +1
Desktop 04.07.2019 20:51 # 0
Ksyrx 29.07.2019 05:50 # 0