Python - 发送"不完整" GET请求

时间:2014-10-04 05:02:48

标签: python sockets http request

所以我正在阅读这些部分GET请求,这些请求会使服务器在此请求一段时间后超时连接。如何发送部分GET请求?..

import socket, sys
host = sys.argv[1]

request = "GET / HTTP/1.1\nHost: "+host+"\n\nUser-Agent:Mozilla 5.0\n" #How could I make this into a partial request?

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.sendto(request, (host, 80))
response = s.recv(1024)

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我认为你混淆了部分和不完整的请求:

  • partial:请求资源的某些部分,这是一个Range请求,如falsetru的答案中所示。这不会导致超时,而是代码206和您请求的资源部分的响应。
  • 不完整:您的请求不完整且无法由服务器处理,因此它会等待请求的其余部分并在一段时间后超时(如果它没有收到请求)。在您的问题中,您已经有了这样一个不完整的请求,因为您没有正确完成请求(它必须以\r\n\r\n而不是\n结束)。其他方式只是TCP连接而不发送任何数据或执行具有内容长度的POST请求,然后不发送请求标头中指定的数据。

答案 1 :(得分:0)

HTTP标头过早结束。 (\n\n应该在标题之后,在内容之前)

import socket, sys
host = sys.argv[1]

request = "GET / HTTP/1.1\nHost: "+host+"\nUser-Agent:Mozilla 5.0\n\n"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.send(request)
response = s.recv(1024)

如果您的意思是部分内容检索,您可以指出Range header

"GET / HTTP/1.1\nHost: "+host+"\nUser-Agent:Mozilla 5.0\rRange: bytes=0-999\n\n"

注意

即使大多数(但不是全部)服务器也接受\r\n,它应该是\n而不是\n作为行结束。