Зертханалық жұмыс №1 Мақсаты



бет1/2
Дата04.10.2022
өлшемі23,93 Kb.
#151644
түріПротокол
  1   2
Байланысты:
Зертханалық жұмыс №1(HTTP сұрауын талдау және жасау)
19сұрақ, Абайдың асыл мұрасы Ережесі, stud.kz 477601, Rus AruN, httpsbspu.rufiles45728

Зертханалық жұмыс №1
Мақсаты:
HTTP сұрауының негізгі өрістерін, жалған сұрауды ұстап алу және жіберу құралдарын талдаңыз.
Кіріспе
HTTP гипермәтінді тасымалдау протоколы (Hypertext Transfer Protocol) дегенді білдіреді. Протокол - бұл әртүрлі құрылғылар байланысатын ережелер жиынтығы. Осы шолғыш терезесінде көргеннің бәрі осы протокол арқылы алынды.
Екі құрылғының байланыс диаграммасын қарастырайық. Бұл құрылғылар сіздің компьютеріңіз және Интернеттегі кейбір сервер болсын: Біріншіден, браузер http сұрауын жібереді. Бұл келесідей көрінуі мүмкін:
GET /other-19 HTTP/1.1
Host: www.scriptsite.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
(.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Бұл жағдайда бірінші жол сұрау жолы болып табылады, ал қалған барлық жолдар сұрау туралы, осы ақпаратты сұрайтын клиент туралы және басқа да көптеген нәрселер туралы қосымша ақпаратты тасымалдайтын http тақырыптары болып табылады.

Біздің сұрауымызға жауап ретінде сервер, мысалы, келесі жауапты жібере алады:


HTTP/1.x 200 OK
Date: Sat, 12 Dec 2009 15:41:52 GMT
Server: Apache/2.0.61 (Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5
mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6(2007-09-24)
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=10, max=1024
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

Бірінші жол - күй жолы. Қалған жолдар тақырыптар болып табылады.


http тақырыптарын көру үшін әдетте шолғышқа енгізілген әзірлеуші ​​құралдарын пайдалану жеткілікті. Ең қолайлы отладка қажет болса, HTTP снайферін қолданған дұрыс - мысалы, Fiddler.


Тақырыптардың толық тізімін берудің мағынасы жоқ - тақырыптар өте мазмұнды және сіз оларды әрқашан бір Википедиядан көре аласыз.


Біз Cookie файлын өту арқылы сайттан бет алуымыз керек деп елестетіп көрейік, сонымен қатар бұл бетке сайттың басты бетіне кіргеннен кейін ғана кіруге рұқсат етілгенін білеміз.


Сұрауды жазайық.


GET http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
\r\n
Бұл сұрау http://www.site.ru/news.html мекенжайындағы беттің мазмұнын GET әдісі арқылы алғымыз келетінін айтады. Хост өрісі бұл бет www.site.ru серверінде орналасқанын көрсетеді, «Сілтеме беруші» өрісі біздің сайттың басты бетінен жаңалықтарға келгенімізді көрсетеді, ал «Cookie» өрісі бізге белгілі бір cookie мәні тағайындалғанын көрсетеді. айнымалы кіріс 1-ге тең. Неліктен Хост, Реферер және Cookie өрістері соншалықты маңызды? Өйткені, динамикалық сайттарды жасау кезінде бағдарламашылар айнымалылар түрінде сценарийлерде пайда болатын осы өрістерді жиі тексереді - бұл сайтты автоматты түрде жүктеп алу мүмкін емес, ішкі беттерге кіру үшін негізгі беттен және т.б. .

Тағы бір мысал. Қолданушы веб-бетте белгілі бір пішінді толтырып, жіберетіндей сұрауды жіберу керек деп елестетіп көрейік. Бұл пішінде екі өріс болсын: логин мен пароль, біз логин мен парольді білеміз.


GET http://www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
\r\n
Біздің логиніміз "Petya Vasechkin". Неліктен "Petya%20Vasechkin"? Себебі арнайы таңбаларды сервер жаңа параметрдің, сұраудың соңының және т.б. белгілері ретінде тануы мүмкін. Сондықтан сұраныста қате жағдайларды болдырмау үшін параметр атаулары мен олардың мәндерін кодтау алгоритмі бар. PHP-де кодтау және декодтау үшін сәйкесінше rawurlencode және rawurldecode функциялары бар. Айта кету керек, егер кодталған параметрлер сұрауда берілсе, PHP декодтауды өзі жасайды.
Енді біз HTTP сұрауының мәтінінде не болуы керек екенін білеміз. Дегенмен, оны қалай жібересіз? Егер біз РНР-мен жұмыс жасайтын болсақ, розеткалармен жұмыс істеу үшін кірістірілген функцияларды пайдалана аламыз. Төмендегі мысал пішінді POST әдісі арқылы жіберуді және нәтижелерді көрсетуді көрсетеді:
$xml='Test';
$posts='xml='.$xml;
$query="POST /test.php HTTP/1.0\r\n".
"Accept: text/html, application/xml;q=0.9, application/xhtml+xml\r\n".
"Accept-Charset: utf-8\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($posts)."\r\n\r\n".$posts."\r\n\r\n";
$socket=fsockopen('localhost',80,$errno,$errstr,60);
fwrite($socket,$query);
while(!feof($socket)){
$s.=fgets($socket);
}
fclose($socket);
echo $s;
?>
Әрине, сіз HTTP сұрауларын жасау және жіберу үшін кез келген басқа құралдарды пайдалана аласыз - шолғыштар, шолғыш плагиндері, снайферлер, консольдік утилиталар (мысалы, curl) немесе тіпті оны bash-та орындаңыз:
exec 3<> /dev/tcp/example.com/80

DATA='{"email": "foo@example.com"}'


LEN=$(printf "$DATA" | wc -c)

cat >&3 << EOF


POST /api/retrieveInfo HTTP/1.1
Host: example.com
User-Agent: Bash
Accept: */*
Content-Type:application/json
Content-Length: $LEN
Connection: close

$DATA
EOF



# Read response.
while read line <&3; do
echo $line
done




Достарыңызбен бөлісу:
  1   2




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет