簡體   English   中英

在基於 Python 的原始“瀏覽器”中使用用戶的輸入作為主機

[英]Using user's input as a host in a Python-based primitive "browser"

我有一個微不足道的問題。 如何在帶有套接字庫的 Python 應用程序中使用用戶輸入作為 URL?

我有這個代碼:

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org', 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)

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

mysock.close()

現在我應該更改它,以便應用程序打開用戶提供的 URL,而不是現在硬編碼的 URL。 我嘗試了很多東西,所有的東西都失敗了,並顯示了不同的錯誤消息。

我嘗試過的事情:1)

url = input("Enter URL: ")
[...]
cmd = 'GET url HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)

然后我嘗試用逗號將我的 url 變量與行的其余部分分開:

cmd = 'GET', url, 'HTTP/1.0\r\n\r\n'.encode()

我也嘗試發揮創意:

url = input("Enter URL: ")
realurl = "GET" + " " + url + " " + "HTTP/1.0\r\n\r\n'.encode()"
[...]
cmd = realurl
mysock.send(cmd)

為簡單起見,現在讓我們跳過 mysock.connect 內容的問題 - 我試圖通過指向同一主機上的頁面的鏈接來啟動該應用程序。

cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\\r\\n\\r\\n'.encode()

應該

cmd = 'GET /romeo.txt HTTP/1.0\\r\\n\\r\\n'.encode()

域不應包含在路徑中...添加一個host標頭,其中包含http://data.pr4e.org/作為值....

如果您打印了cmd那么您的問題就很清楚了。 格式不正確,需要將.encode()應用於整個連接的字符串!

  1. cmd = 'GET url HTTP/1.0\\r\\n\\r\\n'.encode()是一個類似於 obj 的字節,不包括實際的 url

  2. cmd = 'GET', url, 'HTTP/1.0\\r\\n\\r\\n'.encode()是一個元組(str, str, bytes)

  3. realurl = "GET" + " " + url + " " + "HTTP/1.0\\r\\n\\r\\n'.encode()"是一個包含字符串.encode()而不是將其應用於str .

url = input("Enter Url: ")`
cmd = 'GET ' + url + ' HTTP/1.0\r\n\r\n'
# Encode encodes a string to a bites like obj.
# Therefore we must apply it to the entire string!
mysock.send(cmd.encode())

暫無
暫無

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

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