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

TCP Client Python脚本运行异常:请求错误或页面跳转问题求助

解决TCP Client连接Google时出现Bad Request或"Page Has Moved"的问题

嘿,这个问题我之前帮不少人排查过,其实核心就是你的TCP请求没跟上HTTP协议的规范,再加上Google现在默认强制HTTPS跳转导致的。咱们一步步拆解解决:

先搞懂为啥会报错

1. Bad Request(错误请求)

Google的Web服务器是严格遵循HTTP协议的,如果你发送的请求格式不对,直接就会返回400。最常见的问题就是缺少Host请求头或者请求行格式错误。

比如很多新手刚开始写的请求可能是这样的:

GET / HTTP/1.0

这在HTTP/1.0里勉强能行,但现在几乎所有主流网站都是虚拟主机部署,服务器需要Host头来判断你要访问哪个站点。没有这个头,Google服务器根本不知道该返回什么内容,直接给你Bad Request。

2. "Page Has Moved"(页面已移动)

这个是因为Google现在默认把所有HTTP(端口80)的请求都重定向到HTTPS(端口443),所以你用80端口请求时,服务器会返回301/302状态码,告诉你要去新的HTTPS地址访问。

具体解决办法

方法一:修正HTTP请求格式(搞定Bad Request)

你需要发送完全符合HTTP/1.1规范的请求,至少包含这几个部分:

GET / HTTP/1.1
Host: www.google.com
Connection: close

划重点:

  • 请求行必须是GET / HTTP/1.1(HTTP/1.1是当前主流标准)
  • 必须加Host: www.google.com头,这是HTTP/1.1的强制要求
  • 最后一定要加两个连续的换行(也就是\r\n\r\n),这是HTTP协议用来标记请求头结束的信号

方法二:处理重定向(搞定"Page Has Moved")

如果你的最终目标是访问Google主页,最省心的方式是直接连接HTTPS的443端口,但这需要处理SSL/TLS加密(也就是HTTPS协议)。如果非要用80端口,那得自己解析重定向响应:

  1. 当收到服务器返回的响应时,先看状态码是不是301或者302
  2. 从响应头里找到Location字段,里面就是新的跳转地址(一般是https://www.google.com/)
  3. 然后向这个新地址的443端口发起HTTPS请求

不过说实话,手动写TCP来处理HTTPS挺麻烦的,要是不是为了学习协议,直接用现成的HTTP客户端库(比如Python的requests、Java的HttpClient)就好,它们会自动帮你处理重定向、HTTPS加密这些细节。

给你个手动TCP请求的示例(Python)

import socket

# 建立TCP连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("www.google.com", 80))

# 发送合规的HTTP请求
request = b"GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"
sock.sendall(request)

# 接收并打印响应
response = sock.recv(4096)
print(response.decode("utf-8"))

sock.close()

运行这个脚本,你会看到包含301重定向的响应,里面明确写了Location: https://www.google.com/。

最后提个小建议

除非是为了深入学习TCP/HTTP协议的底层逻辑,否则真没必要手动写TCP客户端来处理HTTP请求。现成的库已经把所有坑都填好了,省得你自己处理编码、重定向、加密这些琐碎的事情。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:59:52