PageSourceSearch

https://akmalov.com/assets/js/5416c988.81f3c097.js

js akmalov.com collected 2026-10-08 13:49:50 UTC 14,163 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkakmalov_com||=[]).push([[3065],{6363(e,n,s){s.r(n),s.d(n,{default:()=>c,metadata:()=>l});var l=s(3382),t=s(4848),i=s(8453);const a={slug:"oha",title:"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 http \u0442\u0440\u0430\u0444\u0438\u043a\u0430 - oha",authors:["akmalov"],description:"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 HTTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433 rakyll/hey \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 tui.",image:"./logo.png",tags:["networks","tools"],keywords:["http","https","load testing","stress testing","cli","command line","terminal","generator"],date:new Date("2025-09-06T00:00:00.000Z")},r={image:s(6172).A,authorsImageUrls:[void 0]};function o(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 rakyll/hey"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/blog/oha",children:(0,t.jsx)(n.img,{alt:"oha",src:s(3623).A+"",width:"1500",height:"500"})})}),"\n",(0,t.jsx)(n.h2,{id:"\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435",children:"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435"}),"\n",(0,t.jsx)(n.p,{children:"\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 HTTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438"}),"\n",(0,t.jsx)(n.p,{children:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u0430 \u0432 k8s, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 nginx, \u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0448\u0435\u043b. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 HTTP/1.1, HTTP/2 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f HTTP/3"}),"\n",(0,t.jsx)(n.li,{children:"\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 TUI \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438"}),"\n",(0,t.jsx)(n.li,{children:"\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Rust"}),"\n",(0,t.jsx)(n.li,{children:"\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CLI"}),"\n",(0,t.jsx)(n.li,{children:"\u0433\u0438\u0431\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043c\u0435\u0442\u043e\u0434\u044b, \u0442\u0435\u043b\u043e \u0438 \u0442.\u0434.)"}),"\n",(0,t.jsx)(n.li,{children:"\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 burst-\u0440\u0435\u0436\u0438\u043c\u0430 \u0438 rate limiting"}),"\n",(0,t.jsx)(n.li,{children:"\u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 (text, JSON, CSV)"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 ",(0,t.jsx)(n.a,{href:"https://github.com/hatoo/oha",children:(0,t.jsx)(n.strong,{children:"Github"})})]}),"\n",(0,t.jsx)(n.h3,{id:"\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",children:"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430"}),"\n",(0,t.jsx)(n.p,{children:"macOS:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"brew install oha\n"})}),"\n",(0,t.jsx)(n.p,{children:"Debian/Ubuntu:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list\nsudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg\
1napt update\napt install oha\n'})}),"\n",(0,t.jsx)(n.h3,{id:"\u043f\u0440\u0438\u043c\u0435\u0440-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f",children:"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://github.com/hatoo/oha/blob/master/demo.gif?raw=true",alt:"oha"})}),"\n",(0,t.jsx)(n.p,{children:"\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0435\u0441\u0442 \u043d\u0430 1 \u043c\u0438\u043d\u0443\u0442\u0443:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"oha -z 1m https://akmalov.com\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u0422\u0435\u0441\u0442 \u0441 10 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 1000 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"oha -c 10 -n 1000 https://akmalov.com\n"})}),"\n",(0,t.jsx)(n.p,{children:"POST \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 JSON \u0434\u0430\u043d\u043d\u044b\u043c\u0438:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'oha -m POST -H "Content-Type: application/json" -d \'{"test": "data"}\' https://httpbin.org/post\n'})}),"\n",(0,t.jsx)(n.h3,{id:"\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",children:"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-z"})," \u2014 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ",(0,t.jsx)(n.code,{children:"10s"}),", ",(0,t.jsx)(n.code,{children:"2m"}),", ",(0,t.jsx)(n.code,{children:"1h"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-n"})," \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-c"})," \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-m"})," \u2014 HTTP \u043c\u0435\u0442\u043e\u0434 (GET, POST, PUT, DELETE)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-H"})," \u2014 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 HTTP"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-d"})," \u2014 \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--json"})," \u2014 \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",children:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"hey"})," \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430 Go"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"wrk"})," \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430 C"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"ab"})," (Apache Bench) \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"siege"})," \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e oha:"})," \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Rust."]})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}s.d(n,["assets",0,r,"contentTitle",0,void 0,"frontMatter",0,a,"toc",0,[{value:"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435",id:"\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435",level:2},{value:"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",id:"\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",level:3},{value:"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f",id:"\u043f\u0440\u0438\u043c\u0435\u0440-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f",level:3},{value:"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",id:"\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",level:3},{value:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",id:"\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b",level:3}]])},6172(e,n,s){const l=s.p+"assets/images/logo-730c08ddb3d246597d881ea3d470a7ca.png";s.d(n,["A",0,l])},3623(e,n,s){const l=s.p+"assets/images/logo-730c08ddb3d246597d881ea3d470a7ca.png";s.d(n,["A",0,l])},8453(e,n,s){s.d(n,{R:()=>a,x:()=>r});
1var l=s(6540);const t={},i=l.createContext(t);function a(e){const n=l.useContext(i);return l.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),l.createElement(i.Provider,{value:n},e.children)}},3382(e){e.exports=JSON.parse('{"permalink":"/blog/oha","editUrl":"https://github.com/akmalovaa/akmalov.com/tree/main/blog/oha/index.md","source":"@site/blog/oha/index.md","title":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 http \u0442\u0440\u0430\u0444\u0438\u043a\u0430 - oha","description":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 HTTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433 rakyll/hey \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 tui.","date":"2025-09-06T00:00:00.000Z","tags":[{"inline":true,"label":"networks","permalink":"/blog/tags/networks"},{"inline":true,"label":"tools","permalink":"/blog/tags/tools"}],"readingTime":1.39,"hasTruncateMarker":true,"authors":[{"name":"Artur Akmalov","title":"Product Engineer","url":"https://akmalov.com/about","socials":{"github":"https://github.com/akmalovaa","linkedin":"https://www.linkedin.com/in/akmalov-artur/"},"imageURL":"/img/avatar.jpg","key":"akmalov","page":null}],"frontMatter":{"slug":"oha","title":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 http \u0442\u0440\u0430\u0444\u0438\u043a\u0430 - oha","authors":["akmalov"],"description":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 HTTP-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433 rakyll/hey \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 tui.","image":"./logo.png","tags":["networks","tools"],"keywords":["http","https","load testing","stress testing","cli","command line","terminal","generator"],"date":"2025-09-06T00:00:00.000Z"},"unlisted":false,"nextItem":{"title":"MikroTik CPU Benchmark","permalink":"/blog/mikrotik-cpu-benchmark"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.