Có cách nào đơn giản để thực hiện yêu cầu HTTP và nhận phản hồi thô, không được phân tích (cụ thể là tiêu đề) không?Nhận phản hồi HTTP thô, chưa được phân tích
Trả lời
Sử dụng các module socket trực tiếp:
import socket
CRLF = "\r\n"
request = [
"GET/HTTP/1.1",
"Host: www.example.com",
"Connection: Close",
"",
"",
]
# Connect to the server
s = socket.socket()
s.connect(('www.example.com', 80))
# Send an HTTP request
s.send(CRLF.join(request))
# Get the response (in several parts, if necessary)
response = ''
buffer = s.recv(4096)
while buffer:
response += buffer
buffer = s.recv(4096)
# HTTP headers will be separated from the body by an empty line
header_data, _, body = response.partition(CRLF + CRLF)
print header_data
HTTP/1.0 302 Found
Location: http://www.iana.org/domains/example/
Server: BigIP
Connection: Keep-Alive
Content-Length: 0
Wow, cảm ơn vì giải pháp làm việc đầy đủ! Điều này có cực kỳ phức tạp hơn nếu bạn cần sử dụng HTTPS không? – Acorn
Cảm ơn, Jeremy - Tôi vừa đăng nhập lại để thêm phần tách phản hồi, và bạn đánh tôi với nó :) –
@Acorn: Nếu bạn muốn thực hiện SSL theo cách này, bạn sẽ cần phải mô tả mô-đun ssl và sử dụng SSLSocket thay vì một ổ cắm thông thường. Tôi đã không sử dụng nó bản thân mình, vì vậy có thể có sự khác biệt khác. Âm thanh như một chủ đề tốt cho một câu hỏi SO, mặc dù :) –
gì chính xác bạn đang hy vọng sẽ làm gì với nó rằng bạn không thể làm gì với những cách sử dụng thân thiện hơn khi nhận được dữ liệu? –
Tôi muốn xem liệu máy chủ có đang sử dụng '\ n' thay vì' \ r \ n' trong các phản hồi của nó hay không. – Acorn