2012-04-24 32 views
5

अब तक, मैं निम्नलिखित टुकड़ा:ला रहा है पृष्ठ

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 

जो मुझे निम्नलिखित की तरह एक आउटपुट देता है:

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) 

कि कनेक्शन सिर्फ स्थापित जिसका अर्थ है पूरी तरह से। अब, मैं इस socket.http का उपयोग करके अपने url's का शीर्षक प्राप्त करना चाहता हूं। मैंने पिछले SO प्रश्नों और luasocket's http documentation की खोज की। लेकिन, मुझे अभी भी कोई जानकारी नहीं है कि पेज के पूरे/हिस्से को एक चर में कैसे लाया जाए/स्टोर करें और इसके साथ कुछ करें।

कृपया मदद करें।

उत्तर

4

आप http.request() के 'जेनेरिक' फॉर्म का उपयोग कर रहे हैं, जिसके लिए शरीर को एलटीएन 12 सिंक के माध्यम से संग्रहित करने की आवश्यकता होती है। यह रूप में जटिल रूप में यह लग रहा है, इस कोड की कोशिश नहीं कर रहा है: फिर एक और अधिक सरल समाधान http.request() की सरल फार्म का उपयोग करने के लिए किया जाएगा, तो आपके प्रॉक्सी अपने आवेदन में स्थिर है

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

, और प्रॉक्सी निर्दिष्ट 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); 

आउटपुट:

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

धन्यवाद! यह सामान्य रूप से सभी प्रकार के पृष्ठों के साथ महान काम करता है। :) लेकिन, यूट्यूब लिंक के शीर्षक को लाने की कोशिश करने पर, 'परिणाम' चर में केवल [** 404 त्रुटि **] (http://www.hastebin.com/gikavorone.xml) पृष्ठ है। मैंने दोनों तरीकों की कोशिश की। दूसरा पृष्ठ पृष्ठों को तेज़ी से लाता है। :) – hjpotter92

+0

मैंने अभी एक यूट्यूब लिंक और आउटपुट के साथ अपडेट किया है। यह सब मेरे लिए ठीक काम करता है। शीर्षक में व्हाइटस्पेस पैडिंग है, और शायद कभी-कभी एचटीएमएल इकाइयां भी होती हैं। आप संभवतः उनको अलग करके और परिवर्तित करके इसे सामान्य बनाना चाहते हैं। – MattJ

+0

नहीं, अभी तक काम नहीं किया है। मैं SciTe में फ़ाइल चला रहा हूं (नाम '02.lua')। यहां आउटपुट और कोड का स्क्रीनशॉट है (मैंने 4 अलग-अलग वेब-पेजों का उपयोग किया, 2 अपने स्वयं के वेब-सर्वर पर)। जांचें: http://i.stack.imgur.com/XkQQj.jpg – hjpotter92