You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在发送GET请求时将用户输入传入send()方法

问题原因与解决方法

报错根因

你收到的类型错误来自cmd构造行的类型混用:'GET '是普通字符串类型,in_bytes是提前转好的bytes类型,'HTTP/1.0\r\n\r\n'.encode()也是bytes类型,字符串和bytes不能直接拼接,才触发了该报错。

另外你的代码还有两个会导致后续运行失败的逻辑问题:

  • try块中连接成功后直接调用了soc_open.close(),后续发送请求时用的是已经关闭的socket,必然会报错
  • GET请求行的结构错误:GET后面需要跟的是URL的路径部分,不是完整的URL地址

修正步骤

  1. 所有请求内容先拼接为完整字符串,最后统一转bytes,不要中途混合类型
  2. 删除try块中多余的socket关闭语句
  3. 拆分URL时分别提取域名和请求路径,构造符合HTTP规范的请求行

修正后可运行代码

import socket

response = input("Enter a valid URL: ")
soc_open = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    tray = response.split('/')
    # 提取域名和请求路径
    host = tray[2]
    path = '/' + '/'.join(tray[3:])
    soc_open.connect((host, 80))
    print("Worked!")
except:
    print("ERROR: Invalid URL")
    soc_open.close()
    exit()

# 先拼完整字符串再统一转bytes
cmd = f'GET {path} HTTP/1.0\r\nHost: {host}\r\n\r\n'.encode()
soc_open.send(cmd)

while True:
    data = soc_open.recv(512)
    if len(data) < 1:
        break
    print(data.decode(), end='')

soc_open.close()

补充说明:新增了Host请求头,兼容现在大部分多站点部署的服务器,避免返回400错误

内容的提问来源于stack exchange,提问作者John David K. Kudadjie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:42:02