2017-08-05 54 views
0

所以我已经花了一些时间去学习如何编写http请求正确的请求HTTP创建了一个Python HTML文件

我的目标是请求网页解析的HTML,并从那里提取数据

林无法理解我怎么能做到这一点,如果我没有该文件的具体路径和所有我已经是基本类似的URL的方式IM www.google.com

试图做的urllib .request可以在python中使用套接字编程手动执行

#Playing with Sockets 

import socket 

target_port=80 
target_url ='www.google.com' 

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

client.connect((target_url,target_port)) 


request= "GET https://www.google.com HTTP/1.1\nHost:google.com\n\n" 

message= request.encode() 
client.send(message) 

response=client.recv(4096) 
print(response.decode()) 
+0

目前还不清楚“我没有文件的确切路径”是什么意思。 URL *是确切的路径。 –

回答

1

首先,您的HTTP请求应使用新行分隔符\r\n(十六进制值0x0D0x0A)。您只使用\n0x0A)。 Here's a good stackoverflow question on this

其次,请求文件的路径是相对于主机地址。因此,当您拨打client.connect((target_url,target_port))连接到主机的HTTP服务器时,它已准备好使用相对路径接受您的请求。

最终,你的要求应该是这样的

request= "GET /path/to/file.html HTTP/1.1\r\nHost:google.com\r\n\r\n"

你可能会需要在有一些额外的标题为好。

看一看here欲了解更多信息。如果该链接没有把你带到正确的部分,我特别在谈论HTTP 1.1 Clients部分。 Sample HTTP Exchange部分也很棒。其实,你可能会发现整个页面非常有用。