繁体   English   中英

使用套接字连接到 Internet (Python 2.7)

[英]Using Sockets to Connect to the Internet (Python 2.7)

我正在学习如何在 Python for Informatics 这本书中使用套接字,并且被作业 12.1 难住了,它要求读者

提示用户输入 URL,以便它可以读取任何网页。 您可以使用 split('/') 将 URL 分解为其组成部分,以便提取套接字连接调用的主机名。 使用 try 和 except 添加错误检查以处理用户输入格式不正确或不存在的 URL 的情况。

这是我的尝试:

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x = raw_input("Please enter a URL: ")
try:
    mysock.connect((x, 80))
    mysock.send('GET x')
except:
    Print "I'm sorry, but I cannot open this webpage!"
    quit()

While True:
    data = mysock.recv(512)
    if ( len(data) < 1) :
        break
    print data

mysock.close()

我得到的只是“找不到命令”。

任何帮助将不胜感激!

所以这是我的尝试(没有对 URL 进行错误检查),它也给出了一个错误“错误的请求”,“您的浏览器发送了一个该服务器无法理解的请求”。

我认为它与这个特定部分有关:("GET fname HTTP/1.0\\n\\n)")。 无论如何要在此处插入变量“fname”(用户提示的 URL)?

import socket
fname = raw_input("Enter an URL: ")
parts = fname.split("/")
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect( (parts[2], 80))
mysock.send("GET fname HTTP/1.0\n\n)")
while True:
    data = mysock.recv(512)
    if ( len (data) < 1) :
        break
print data
mysock.close()
import socket
url = raw_input('Enter url-')
words = url.split('/')
print words
if words[0] != 'http:':
    host_url = words[0]
    url = 'http://'+ url
else:
    host_url = words[2]
request = 'GET '+ url + ' HTTP/1.0\n\n'
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((host_url, 80))
mysock.send(request)
while True:
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print data
mysock.close()
import socket
url=input('Enter-')
host=url.split('/')[2]
mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect((host,80))
cmd=f'GET {url} 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()    

这是我的工作代码,我认为它会对您有所帮助:

{import socket

url=input("Enter url >> ")
try:
    address=url.split("/")

    HOST=address[2]

    print("HOST: ",HOST)
    mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    mysock.connect((HOST,80))
    cmd=("GET " + url+ " 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()    
except:
    print("Improper formatted url")}

这对我来说非常有效,因为tryexcept 的工作方式是重新提示您进入网页而不是完全结束程序:

import socket

    while True:
        webpage=input('Enter a web page: ')
        try:
            webpagelst=webpage.split('/')
            host=webpagelst[2]
            mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            mysock.connect((host, 80))
            cmd = 'GET '+webpage+' HTTP/1.0\r\n\r\n'
            mysock.send(cmd.encode())
        except:
            print('Please enter a valid web address')
            continue
        while True:
            data = mysock.recv(512)
            if len(data) < 1:
                break
            print(data.decode(),end='')
        break
    mysock.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM