2017-08-05 55 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部分也很棒。其實,你可能會發現整個頁面非常有用。