簡體   English   中英

無法使用 python 中的套接字編程檢索 web 數據

[英]Not able to retrieve web data using socket programming in python

無法使用 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 轉發。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> 

這不是一個有效的 HTTP/1.1 請求。 它錯過了主機 header 並且應該只給出一個相對路徑而不是絕對路徑:

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

有關更多信息,請閱讀HTTP 標准,不要只是猜測 HTTP 的外觀。 請注意,HTTP 可能比您想象的要復雜得多。 例如:即使有正確的請求,該程序在得到響應后也會掛起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM