我用python编写了这段代码,它使用套接字显示http响应。此时,我可以识别状态代码,并打印消息。但是现在我想要准备我的代码来响应不同的http响应,就像一个特别的,比如302,它是永久移动的,所以我的代码需要创建一个新的GET方法到新的位置。
做这件事的最好方法是什么?
PS:无法使用http库
from socket import *
#response dictionary
my_dict={200:'ok',302:'moved',404:'error'}
from socket import *
#ask inputs
target_host = input("Enter the url: ")#localhost
target_dir = input("Enter the path: ")#/index.html or /
target_port = input("Enter the port number: ")#80
# create a socket object
client = socket(AF_INET, SOCK_STREAM) # create an INET (IPv4), STREAMing socket (TCP)
# connect the client
client.connect((target_host,int(target_port)))
# send some data
request = "GET /%s HTTP/1.1\r\nHost:%s\r\n\r\n" % (target_dir, target_host)
#Send data to the socket.
client.send(request.encode())
# receive some data
data = b''
while True: #while data
buffer = client.recv(2048) #recieve a 2048 bytes data from socket
if not buffer or buffer=='\n': #no more data, break
break
data += buffer #concatenate buffer data
client.close() #close connection
status = -1 #init status
word = data.split() #split data in a array of words
try:
status = int(word[1])#cast data[i]
except:
pass
#print data
print("status code: " , status)
print("server reply: " , data.decode())发布于 2021-02-15 04:10:33
您可以直接使用socket.gethostbyname获取服务器ip,然后创建到所需ip的连接,而不是解析多个重定向,然后使用最终url的dns解析来获取服务器ip。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip_addr = socket.gethostbyname('google.com')
s.connect((ip_addr, 443)) # using https port 您可以在浏览器中输入variable ip_addr中存在的值并进行检查,该值将被重定向到google.com
https://stackoverflow.com/questions/66199175
复制相似问题