Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建使用套接字从传递的URL获取HTML的python函数_Python_Sockets - Fatal编程技术网

创建使用套接字从传递的URL获取HTML的python函数

创建使用套接字从传递的URL获取HTML的python函数,python,sockets,Python,Sockets,我想创建一个方法,返回作为参数传递的url的HTML。我知道如何使用“urllib2”或“requests”等工具来实现这一点。但是,我仅限于使用套接字。到目前为止,我已经试过了,但它不起作用 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((url, 80)) s.sendall("GET / HTTP/1.0\r\n\r\n") return s.recv(4096) 错误在于请求,我认为它的格式不正确 我从其

我想创建一个方法,返回作为参数传递的url的HTML。我知道如何使用“urllib2”或“requests”等工具来实现这一点。但是,我仅限于使用套接字。到目前为止,我已经试过了,但它不起作用

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((url, 80))
s.sendall("GET / HTTP/1.0\r\n\r\n")
return s.recv(4096)
错误在于请求,我认为它的格式不正确


我从其他用户那里尝试过一些类似的解决方案,但没有一个有效。任何帮助都将不胜感激,谢谢。

尽管只有在HTTP/1.1中,
主机
头才是必需的,但实际上许多站点都需要它,即使您正在执行HTTP/1.0请求,尤其是如果它们在同一IP地址上承载不同的域。因此,您需要的至少是以下内容:

  s.sendall("GET / HTTP/1.0\r\nHost: " + hostname + "\r\n\r\n")

请注意,有些站点还需要特定的
用户代理
值或其他标题,因为它们试图检测和阻止机器人程序。而且,站点通常会使用HTTP重定向进行回复,因此,如果您想访问HTML,则需要能够解析响应,遵循重定向(并在新请求中包含给定的cookie),可能还会处理HTTPS而不是普通HTTP等。

错误是什么?这取决于传递的url。例如,当我通过“www.stackoverflow.com”时,我得到。。。HTTP/1.1 500找不到域快速错误:未知域 Fastly错误:未知域:。请检查此域是否已添加到服务。

…错误都是这种类型,具有不同的语义。套接字对象是否有获取主机名的方法?@Xlqt:套接字与本地IP地址及其连接的IP地址相关联。它不知道主机名,只知道IP地址。代码中的
hostname
实际上就是您错误地声称的
url
。URL类似于
http://hostname:port/path...
但是您只需要套接字中的主机名或IP地址,并且在连接套接字时只提供此地址(和端口),而不是完整的URL。