【问题标题】:Not able to retrieve web data using socket programming in python无法在 python 中使用套接字编程检索 Web 数据
【发布时间】:2020-02-28 08:44:50
【问题描述】:

无法在 python 中使用套接字编程检索 Web 数据:

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org',80))

cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.1\r\n\r\n'.encode()
mysock.send(cmd)
while True:
    data = mysock.recv(100)
    if(len(data) < 1):
        break
    print(data.decode(),end='')
mysock.close()

错误

HTTP/1.1 400 错误请求

日期:2019 年 11 月 2 日星期六 08:41:58 GMT

服务器:Apache/2.4.18 (Ubuntu)

内容长度:308

内容类型:文本/html;字符集=iso-8859-1

通过:HTTP/1.1 forward.http.proxy:3128

连接:关闭

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at do1.dr-chuck.com Port 80</address>
</body></html> 

【问题讨论】:

    标签: python html sockets http server


    【解决方案1】:

    这不是一个有效的 HTTP/1.1 请求。它错过了 Host 标头,应该只给出一个相对路径而不是绝对路径:

      cmd = 'GET /intro-short.txt HTTP/1.1\r\nHost: data.pr4e.org\r\n\r\n'.encode()
    

    有关更多信息,请阅读HTTP standard,不要只是猜测 HTTP 的样子。请注意,HTTP 可能比您想象的要复杂得多。例如:即使请求正确,该程序在收到响应后也会挂起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      相关资源
      最近更新 更多