2012-04-24 13 views
5

Şimdiye kadar, ben şu parça var:getiriliyor sayfa

local socket = require "socket.http" 
client,r,c,h = socket.request{url = "http://example.com/", proxy="<my proxy and port here>"} 
for i,v in pairs(c) do 
    print(i, v) 
end 

bana aşağıdaki gibi bir çıktı verir: Bağlantı sadece kurulmuş demektir

connection close 
content-type text/html; charset=UTF-8 
location http://www.iana.org/domains/example/ 
vary Accept-Encoding 
date Tue, 24 Apr 2012 21:43:19 GMT 
last-modified Wed, 09 Feb 2011 17:13:15 GMT 
transfer-encoding chunked 
server Apache/2.2.3 (CentOS) 

mükemmel şekilde. Şimdi, bu socket.http kullanarak url's başlığım getirmek istiyorum. Önceki SO sorularını ve luasocket's http documentation'u aradım. Ancak, sayfanın tamamını/bir kısmını bir değişkene nasıl getireceğinizi/saklayacağımı ve onunla bir şeyler yapmayı nasıl yapacağım konusunda hiçbir fikrim yok.

Lütfen

Yardım edin.

cevap

4

Vücudunuzu bir LTN12 evyeni üzerinden depolamayı gerektiren 'genel' formunu http.request() kullanıyorsunuz. Proxy uygulamanızda boyunca sabit ise o zaman daha basit bir çözüm http.request() basit formu kullanabilirsiniz olacaktır

local socket = require "socket.http" 
local ltn12 = require "ltn12"; -- LTN12 lib provided by LuaSocket 

-- This table will store the body (possibly in multiple chunks): 
local result_table = {}; 
client,r,c,h = socket.request{ 
    url = "http://example.com/", 
    sink = ltn12.sink.table(result_table), 
    proxy="<my proxy and port here>" 
} 
-- Join the chunks together into a string: 
local result = table.concat(result_table); 
-- Hacky solution to extract the title: 
local title = result:match("<[Tt][Ii][Tt][Ll][Ee]>([^<]*)<"); 
print(title); 

ve proxy belirlemek: göründüğü kadar, bu kodu deneyin karmaşık değil olarak http.PROXY aracılığıyla:

local http = require "socket.http" 
http.PROXY="<my proxy and port here>" 

local result = http.request("http://www.youtube.com/watch?v=_eT40eV7OiI") 
local title = result:match("<[Tt][Ii][Tt][Ll][Ee]>([^<]*)<"); 
print(title); 

Çıktı:

Flanders and Swann - A song of the weather 
    - YouTube 
+0

teşekkürler! Bu genel olarak her türlü sayfa ile harika çalışır. :) Ancak, youtube bağlantılarının başlığını almaya çalışırken, 'result' değişkeninde yalnızca [** 404 error **] (http://www.hastebin.com/gikavorone.xml) sayfası var. Her iki yöntemi de denedim. İkincisi, sayfaları daha hızlı getiriyor. :) – hjpotter92

+0

Örnek bir YouTube bağlantısı ve aldığım çıktı ile yeni güncellendi. Her şey benim için iyi çalışıyor. Başlıkta boşluk boşlukları ve muhtemelen HTML varlıkları da bazen vardır. Muhtemelen bunları sıyırma ve dönüştürme ile biraz normalleştirmek isteyeceksiniz. – MattJ

+0

Hayır, henüz çalışmadı. SciTe'de (02.lua) isimli dosyayı çalıştırıyorum. İşte çıktının ekran görüntüsü ve kod (kendi web sunucumda 4 farklı web sayfası kullandım). Kontrol: http://i.stack.imgur.com/XkQQj.jpg – hjpotter92