자세한 설명은 ref. 1 을 참고하자.
여기서는 간단하게 TCP packet 을 만들고, 그 위에 Http message 를 얹은 source code 를 확인하자.
#-*- coding: utf-8 -*-
__author__ = 'namhadmin'
import httplib2
import socket
import sys
import re
import time
class QueryClient:
def __init__(self):
self.socket = None
def _createSocket(self):
try:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPv4 and TCP
except socket.error, msg:
print 'Failed to create socket. Error code : ' + str(msg[0]) + ', Error message : ' + msg[1]
sys.exit()
def _connectAndSend(self, remote_ip, port, message):
self.socket.connect((remote_ip, port))
self.socket.setblocking(1)
try:
self.socket.sendall(message)
except socket.error:
# send failed
print
'Send failed'
sys.exit()
print
'Send successfully'
def _printResult(self, data, remote_ip):
plm = re.compile(r'Last-Modified:\s*(.*?)\r\n', re.DOTALL)
pd = re.compile(r'Date:\s*(.*?)\r\n', re.DOTALL)
matchLastMod = plm.search(data);
matchDate = pd.search(data);
if matchLastMod is not None:
last_mod_time = matchLastMod.group(1)
date = matchDate.group(1)
difSecFromDate = time.mktime(time.strptime(date, "%a, %d %b %Y %H:%M:%S GMT")) - time.mktime(
time.strptime(last_mod_time, "%a, %d %b %Y %H:%M:%S GMT"))
difSecFromCurrent = time.mktime(time.gmtime()) - time.mktime(
time.strptime(last_mod_time, "%a, %d %b %Y %H:%M:%S GMT"))
okDifSecFromDate = 'ok' if difSecFromDate <= 600 else 'nok'
okDifSecFromCurrent = 'ok' if difSecFromCurrent <= 600 else 'nok'
print 'ip address = ', remote_ip
print 'current time - last_modified = %s (%s)' % (difSecFromCurrent, okDifSecFromCurrent)
print 'date - last_modified = %s (%s)' % (difSecFromDate, okDifSecFromDate)
def run(self):
# try:
# remote_ip = socket.gethostbyname(host)
# except socket.gaierror:
# print 'Hostname could not be resolved. Exiting'
# sys.exit()
#
# print 'Ip address of ' + host + ' is ' + remote_ip
host = "image.cjmall.com"
port = 80
message = 'GET /cjupload/mcom_web/xml/app/oclock/ctg/OclockItem_291295.json HTTP/1.1\r\n\
Host: ' + host + '\r\n\
Connection: keep-alive\r\n\
Cache-Control: no-cache\r\n\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n\
Pragma: no-cache\r\n\
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\r\n\
Accept-Encoding: gzip,deflate,sdch\r\n\
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4\r\n\
\r\n'
remote_ip = '211.110.198.68'
self._createSocket()
self._connectAndSend(remote_ip, port, message)
data = self.socket.recv(4096)
self._printResult(data, remote_ip)
self.socket.close()
remote_ip = '211.110.198.73'
self._createSocket()
self._connectAndSend(remote_ip, port, message)
data = self.socket.recv(4096)
self._printResult(data, remote_ip)
self.socket.close()
if __name__ == "__main__":
client = QueryClient()
client.run()
댓글 없음:
댓글 쓰기