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 :(

标签:

代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值