2012-04-24 11 views
5

tej pory, mam następujący fragment:Pobieranie strona url użyciu luasocket i pełnomocnika

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 

który daje mi moc jak następuje:

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) 

co oznacza, że ​​gra powstała właśnie idealnie. Teraz chcę pobrać tytuł mojego url's przy użyciu tego socket.http. Przeszukałem poprzednie pytania SO i luasocket's http documentation. ale nadal nie mam pojęcia, jak pobrać/zapisać całą/część strony w zmiennej i coś z nią zrobić.

Proszę o pomoc.

Odpowiedz

4

Używasz "ogólnej" formy http.request(), która wymaga przechowywania ciała przez zlew LTN12. To nie jest tak skomplikowane jak się wydaje, spróbuj tego kodu:

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); 

Jeśli proxy jest stała w całym wniosku wówczas prostsze rozwiązanie byłoby użyć prostą formę http.request() i określ proxy poprzez http.PROXY:

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); 

wyjściowa:

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

Dzięki! Działa to świetnie w ogóle na wszelkiego rodzaju stronach. :) Ale przy próbie pobrania tytułu linków youtube, zmienna 'result' zawiera tylko stronę [** 404 error **] (http://www.hastebin.com/gikavorone.xml). Próbowałem obu metod. Drugi szybciej pobiera strony. :) – hjpotter92

+0

Właśnie zaktualizowałem przykładowy link do YouTube i otrzymane dane wyjściowe. Wszystko działa dobrze dla mnie. Tytuł zawiera dopełnienie białych znaków i czasami również elementy HTML. Prawdopodobnie będziesz chciał trochę go znormalizować, usuwając i konwertując te. – MattJ

+0

Nie, jeszcze nie działał. Uruchomiłem plik (o nazwie '02.lua') w SciTe. Oto zrzut ekranu wyjścia i kodu (użyłem 4 różnych stron internetowych, 2 na moim własnym serwerze internetowym). Sprawdź: http://i.stack.imgur.com/XkQQj.jpg – hjpotter92

Powiązane problemy