天天看點

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]

特别注意:本站所有轉載文章言論不代表本站觀點!

本站所提供的圖檔等素材,版權歸原作者所有,如需使用,請與原作者聯系。