如何使用Python制作一个很大的HTTP(S)请求?

编辑:我将问题扩展到HTTPS。 “S”部分尚未解决,我不需要它,但它可能对其他人很有意思。如何使用Python制作一个很大的HTTP(S)请求?

我想与Python 2.7做的

hdr='GET/HTTP/1.1\r\nContent-Length: 10000000000\r\n\r\n' 

(echo -en "$hdr"; dd if=/dev/zero bs=1000000 count=999; read tmp) | nc $SOME_IP 80

相当。如果可能的话,我只想使用标准库加上requestssockets模块。上述脚本向$SOME_IP发送一个大的HTTP请求(〜1GB的零),而不会对发送方RAM产生负担。

回答:

像这样的东西?

import socket 

def get_content_length():

return 10000000000

def get_chunk_size():

return 1000000

def yield_content():

total_size = get_content_length()

chunk_size = get_chunk_size()

current_size = 0

end = total_size - chunk_size

chunk = '\x00' * chunk_size

while current_size < end:

yield chunk

current_size += chunk_size

yield chunk[:total_size - current_size]

s = socket.socket()

s.connect((host, port))

hdr='GET/HTTP/1.1\r\nContent-Length: %s\r\n\r\n' % get_content_length()

s.sendall(hdr)

for chunk in yield_content():

s.sendall(chunk)

# should I wait for the response?

回答:

以下是我熟起来,似乎工作:

import sys, socket 

def flood(hostname, port, count=1):

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

s.connect((hostname, port))

s.sendall('GET/HTTP/1.1\r\nContent-Length: 10000000000\r\n\r\n')

with open('/dev/zero', 'rb',) as data:

for _ in xrange(count):

s.sendall(data.read(1000000))

s.shutdown(socket.SHUT_WR)

while True:

data = s.recv(1024)

if data == "":

break

print("Received:", repr(data))

print("Connection closed.")

s.close()

通过freakish答案当然是更多的跨plattform,因为它不需要/dev/null

以上是 如何使用Python制作一个很大的HTTP(S)请求? 的全部内容, 来源链接: utcz.com/qa/262970.html

回到顶部