首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web客户端python http

web客户端python http
EN

Stack Overflow用户
提问于 2021-02-15 03:19:22
回答 1查看 49关注 0票数 0

我用python编写了这段代码,它使用套接字显示http响应。此时,我可以识别状态代码,并打印消息。但是现在我想要准备我的代码来响应不同的http响应,就像一个特别的,比如302,它是永久移动的,所以我的代码需要创建一个新的GET方法到新的位置。

做这件事的最好方法是什么?

PS:无法使用http库

代码语言:javascript
复制
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())
EN

回答 1

Stack Overflow用户

发布于 2021-02-15 04:10:33

您可以直接使用socket.gethostbyname获取服务器ip,然后创建到所需ip的连接,而不是解析多个重定向,然后使用最终url的dns解析来获取服务器ip。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66199175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档