天天看点

python http请求_Python实现简单的HTTP请求发送

代码如下

import socket

def clean_host(host):

"""Remove leading http:// and trailing /path_to_somewhere in host name"""

host = host.strip()

prefixes = ['http://']

for prefix in prefixes:

if host.lower().startswith(prefix):

host = host[len(prefix):]

slash = host.find('/')

if slash>0:

host = host[:slash]

return host

def get_ipv4_list(host, port=80):

"""Return the list of ips corresponding to given host and port number"""

info = socket.getaddrinfo(host, port)

return [item[4][0] for item in info]

def send_request(ip, data, remote_port=80, local_port=2333, bufsize=1024):

"""Send data to give ip and receive response from the server"""

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((ip, remote_port))

sock.send(data)

recv_data = []

while True:

buf = sock.recv(bufsize)

if not buf:

break

recv_data += [buf]

sock.close()

return ''.join(recv_data)

def read_text(promp='> ', promp2='~ '):

"""Read in text from stdin terminted by EOF"""

text = []

try:

while True:

if not text:

text = [raw_input(promp)+'\n']

else:

text += [raw_input(promp2)+'\n']

except EOFError:

return ''.join(text)

return ''

def http_app():

remote_host = raw_input('Input remote host name (for example www.baidu.com): ')

remote_port = 80

buf = raw_input('Input remote port number (default 80): ')

if buf.isdigit() and 0<=int(buf)<=65535:

remote_port = int(buf)

print remote_host, 'at port', remote_port

print 'Resolving host...'

ip_list = get_ipv4_list(clean_host(remote_host), port=remote_port)

ip = ip_list[0]

print 'Using ip address', ip

while True:

data = read_text()

if not data:

break

print '[REQUEST]'

print data

response = send_request(ip, data, remote_port=remote_port)

print '[REPONSE]'

print response

if __name__ == '__main__':

print 'Running http_app. Press Ctrl+C to quit'

while True:

try:

http_app()

except KeyboardInterrupt:

if raw_input('Quit? ').lower() == 'n':

break

不过不知道是代码哪里有问题导致返回的全都是Bad Request :(

标签:

代码

版权申明:本站文章部分自网络,如有侵权,请联系:[email protected]

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。