Last active
March 19, 2016 04:44
-
-
Save KhorAMus/4d8e370d04b78a4e5fbf to your computer and use it in GitHub Desktop.
Exercise 2.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Отправляем запрос с использованием python 3.4.4 и библиотеки socket | |
Исходный код программы: | |
import socket | |
message_to_send = b'''GET /news/ HTTP/1.1 | |
Host: www.e1.ru | |
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509Firefox/3.0b5 | |
Accept: text/html | |
Connection: close | |
''' | |
sock = socket.socket() | |
sock.connect(('www.e1.ru', 80)) | |
sock.send(message_to_send) | |
data = sock.recv(1024) | |
while data: | |
print(data.decode('windows-1251')) | |
data = sock.recv(1024) | |
sock.close() | |
Результат (только первые 73 строки): | |
HTTP/1.1 200 OK | |
Server: nginx | |
Date: Thu, 17 Mar 2016 17:18:00 GMT | |
Content-Type: text/html; charset=windows-1251 | |
Transfer-Encoding: chunked | |
Connection: close | |
10b7 | |
<html> | |
<head> | |
<link rel="shortcut icon" href="/favicon.ico" /> | |
<title>Новости Екатеринбурга: E1.ru</title> | |
<meta name="description" content="Новости Екатеринбурга на портале E1.ru." /> | |
<link href="/news/static/css/news.css?17" type="text/css" rel="stylesheet" /> | |
<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script> | |
<meta name="apple-itunes-app" content="app-id=917630579"> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.ver3.js"></script> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.scroll.js"></script> | |
<link rel="canonical" href="http://www.e1.ru/news/" /> | |
<link rel="alternate" type="application/rss+xml" title="Подписка на новости E1.ru" href="http://www.e1.ru/news/rdf/full.xml" /><script type="text/javascript">var _li_hsd_rn_sect = "/smi/66/news"</script> | |
<script type="text/javascript">var _tns_sect = "e1_news"</script> | |
<script type="text/javascript" src="http://www.e1.ru/jscript/jquery-1.2.6.js"></script> | |
<script>var $J = jQuery.noConflict();</script> | |
<script type="text/javascript" src="http://www.e1.ru/jscript/jquery.fancybox.js"></script> | |
<script type="text/javascript" src="http://www.e1.ru/jscript/jquery.pngFix.pack.js"></script> | |
<script type="text/javascript" src="http://www.e1.ru/jscript/jquery.metadata.js"></script> | |
<link rel="stylesheet" type="text/css" href="http://www.e1.ru/jscript/fancy.css" /> | |
<script type="text/javascript" src="http://reklama.ngs.ru/dohcohT2.js?"></script> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.ver3.js"></script> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.scroll.js"></script> | |
<!-- HS Media - RU - RTA - RUB - main RTA --> | |
<script type='text/javascript'> | |
var crtg_nid = '4126'; | |
var crtg_cookiename = 'crtg_rta'; | |
var crtg_varname = 'crtg_content'; | |
function crtg_getCookie(c_name){ var i,x,y,ARRCookies=document.cookie.split(";");for(i=0;i<ARRCookies.length;i++){x=ARRCookies[i].substr(0,ARRCookies[i].indexOf("="));y=ARRCookies[i].substr(ARRCookies[i].indexOf("=")+1);x=x.replace(/^\s+|\s+$/g,"");if(x==c_name){return unescape(y);} }return'';} | |
var crtg_content = crtg_getCookie(crtg_cookiename); | |
var crtg_rnd=Math.floor(Math.random()*99999999999); | |
(function(){ | |
var crtg_url=location.protocol+'//rtax.criteo.com/delivery/rta/rta.js?netId='+escape(crtg_nid); | |
crtg_url +='&cookieName='+escape(crtg_cookiename); | |
crtg_url +='&rnd='+crtg_rnd; | |
crtg_url +='&varName=' + escape(crtg_varname); | |
var crtg_script=document.createElement('script');crtg_script.type='text/javascript';crtg_script.src=crtg_url;crtg_script.async=true; | |
if(document.getElementsByTagName("head").length>0)document.getElementsByTagName("head")[0].appendChild(crtg_script); | |
else if(document.getElementsByTagName("body").length>0)document.getElementsByTagName("body")[0].appendChild(crtg_script); | |
})(); | |
</script> | |
<link href="/style_new.css" type="text/css" rel="stylesheet" /> | |
<!-- google-analytics --> | |
<script type="text/javascript"> | |
var _gaq = _gaq || []; | |
var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js'; | |
_gaq.push(['_require', 'inpage_linkid', pluginUrl]); | |
_gaq.push(['_setAccount', 'UA-3975627-1']); | |
_gaq.push(['_setDomainName','www.e1.ru']); | |
_gaq.push(["_addOrganic","go.mail.ru", "q"]); | |
_gaq.push(["_addOrganic","nigma.ru", "s"]); | |
_gaq.push(["_addOrganic","search.ukr.net", "search_query"]); | |
_gaq.push(["_addOrganic","search.qip.ru", "query"]); | |
_gaq.push(["_addOrganic","yandex.ru", "text"]); | |
_gaq.push(["_addOrganic","google.ru", "q"]); | |
_gaq.push(["_addOrganic","google.com.ua", "q"]); | |
_gaq.push(["_addOrganic","liveinternet.ru", "q"]); | |
_gaq.push(["_addOrganic","news.rambler.ru", "query"]); | |
_gaq.push(['_trackPageview']); | |
(function() { | |
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |
})(); | |
</script> | |
Отправляем запрос с использованием python 3.4.4 и библиотеки http.client | |
import http.client | |
connection = http.client.HTTPConnection('www.e1.ru') | |
connection.request('GET', '/news/', headers= | |
{ | |
'Host': 'www.e1.ru', | |
'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509Firefox/3.0b5', | |
'Accept': 'text/html', | |
'Connection': 'close' | |
}) | |
response = connection.getresponse() | |
print(response.status, response.reason) | |
print(response.info()) | |
read_string = response.read() | |
print(read_string.decode('windows-1251')) | |
Результат: | |
Server: nginx | |
Date: Fri, 18 Mar 2016 20:18:10 GMT | |
Content-Type: text/html; charset=windows-1251 | |
Transfer-Encoding: chunked | |
Connection: close | |
Set-Cookie: urbid=VuxiggAALyYDBRoC7otf4pRCZcM=; path=/; expires=Sat, 18-Mar-17 20:18:10 GMT | |
Cache-control: no-cache="set-cookie" | |
<html> | |
<head> | |
<link rel="shortcut icon" href="/favicon.ico" /> | |
<title>Новости Екатеринбурга: E1.ru</title> | |
<meta name="description" content="Новости Екатеринбурга на портале E1.ru." /> | |
<link href="/news/static/css/news.css?17" type="text/css" rel="stylesheet" /> | |
<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script> | |
<meta name="apple-itunes-app" content="app-id=917630579"> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.ver3.js"></script> | |
<script type="text/javascript" src="/jscript/adfox.asyn.code.scroll.js"></script> | |
<link rel="canonical" href="http://www.e1.ru/news/" /> | |
<link rel="alternate" type="application/rss+xml" title="Подписка на новости E1.ru" href="http://www.e1.ru/news/rdf/full.xml" /><script type="text/javascript">var _li_hsd_rn_sect = "/smi/66/news"</script> | |
<script type="text/javascript">var _tns_sect = "e1_news"</script> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Отправляем запрос с использованием python 3.4.4 и библиотеки socket. В переменной message_to_send хранится строка, каждый символ которой занимает один байт. | |
Она содержит данные, которые мы хотим передать. Метод объекта socket под названием recv считывает, то что передал нам сервер www.e1.ru, | |
при этом всю страницу сразу, метод считать не может, поэтому он вызывавается в цикле. | |
Результатом работы программы является HTML-страница. Я написал только первые 73 строки, хотя результатом работы программы является | |
примерно 3000 строк. | |
Отправляем запрос с использованием python 3.4.4 и библиотеки http.client . Эта библиотека более высокоуровневая. Об этом свидетельствует, то что | |
в метод request передаём не сам запрос, а отдельно метод, страницу, которую хотим получить и заголовки, как словарь. | |
Теперь, чтобы вывести сообщение приходится отдельно обращаться к полям: status, reason, message и методу read(). | |
Чтобы получить всё тело принятого сообщения достаточно вызвать метод read объекта response один раз. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment