Skip to content

Instantly share code, notes, and snippets.

@KhorAMus
Last active March 19, 2016 04:44
Show Gist options
  • Save KhorAMus/4d8e370d04b78a4e5fbf to your computer and use it in GitHub Desktop.
Save KhorAMus/4d8e370d04b78a4e5fbf to your computer and use it in GitHub Desktop.
Exercise 2.2
Отправляем запрос с использованием 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>
Отправляем запрос с использованием 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