2012-11-04 5 views

risposta

1

Ottenere l'uscita pasta bin prima è non parte del Pastebin API:

Questa opzione non è in realtà parte della nostra API, ma si potrebbe ancora voglia di utilizzarlo. Per ottenere l'output RAW di una pasta è possibile utilizzare il nostro URL uscita dei dati RAW:

http://pastebin.com/raw.php?i= 

basta aggiungere il paste_key alla fine di tale URL e si otterrà l'output RAW.

Dal paste privati ​​possono essere visti solo dall'utente che le ha create, la mia ipotesi è che usano il logincookie per l'autenticazione. In tal caso, dovrai inviarlo con la richiesta HTTP.


Rispetto ad attuare questo in Lua, (dal momento che non hai detto quale libreria si sta utilizzando) Vado avanti e raccomandare il HTTP module in LuaSocket o il meraviglioso Luvit (http://luvit.io).

0

So che è un po 'tardi per rispondere alla domanda, ma spero che questo possa aiutare qualcuno più avanti.

Se si desidera accedere a paste private non elaborate, è necessario innanzitutto elencare le paste che l'utente ha creato. Questa è una parte dell'API. Ciò richiede che l'utente sia connesso.

Con questa API è possibile elencare tutte le paste create da un determinato utente. Sarà necessario inviare una richiesta POST valida per l'URL di seguito per accedere ai dati :

http://pastebin.com/api/api_post.php 

La risposta che si otterrà sarà una risposta XML, come segue:

<paste> 
    <paste_key>0b42rwhf</paste_key> 
    <paste_date>1297953260</paste_date> 
    <paste_title>javascript test</paste_title> 
    <paste_size>15</paste_size> 
    <paste_expire_date>1297956860</paste_expire_date> 
    <paste_private>0</paste_private> 
    <paste_format_long>JavaScript</paste_format_long> 
    <paste_format_short>javascript</paste_format_short> 
    <paste_url>http://pastebin.com/0b42rwhf</paste_url> 
    <paste_hits>15</paste_hits> 
</paste> 

Una volta ottenuto ciò, analizza l'XML per ottenere lo paste_key e lo paste_private. È necessario controllare il valore di paste_private perché si desidera solo le paste private. La documentazione dice:

Abbiamo 3 valori validi disponibili che è possibile utilizzare con il 'api_paste_private' parametro:

0 = Public 
1 = Unlisted 
2 = Private (only allowed in combination with api_user_key, as you have to be logged into your account to access the paste) 

Quindi, se la vostra pasta ha paste_private set per 2, ottenere il paste_key per questo.

Una volta ottenuto il paste_key, utilizzare la chiamata API per ottenere la pasta RAW. Nessun nome utente o password richiesti una volta che hai incollato la chiave per la pasta privata.

Buon divertimento!

1

Ecco un esempio pronto il codice per voi:

local https = require('ssl.https') 
    https.TIMEOUT= 15 

    local private_raw_url="https://pastebin.com/raw/YOURPAGE" -- Change raw link 
    local user_name, user_password = "USER", "PASS"   -- and user with password 

    local request_body = "submit_hidden=submit_hidden&user_name=".. user_name .. "&user_password=" .. user_password .. "&submit=Login" 

    local resp = {} 
    local res, code, headers, status = https.request ({ 
          method = 'POST', 
          url = "https://pastebin.com/login", 
          headers = { 
           Host = "pastebin.com", 
           ["Content-Type"] = "application/x-www-form-urlencoded", 
           ["Content-Length"] = string.len(request_body), 
           Connection = "keep-alive", 
          }, 
          source = ltn12.source.string(request_body), 
          sink = ltn12.sink.table(resp), 
          protocol = "tlsv1", 
          verify = "none", 
          verifyext = {"lsec_continue", "lsec_ignore_purpose"}, 
          options = { "all", "no_sslv2", "no_sslv3" } 
         }) 
    if not headers['set-cookie']:find('pastebin_user') then 
      print('bad login') 
      return 
    end 
    resp={} 
    local cookie = headers['set-cookie'] or '' 
    local cookie1, cookie2, cookie3 = cookie:match("(__cfduid=%w+;).*(PHPSESSID=%w+;).*(pastebin_user=%w+;)") 
    if cookie1 and cookie2 and cookie3 then 
      cookie = cookie1 .. cookie2 .. cookie3 
      body, code, headers= https.request{ 
       url = private_raw_url , 
       headers = { 
          --Host = "pastebin.com", 
          ['Cookie'] = cookie, 
          ['Connection'] = 'keep-alive' 
           },   
       sink = ltn12.sink.table(resp)  
      } 

      if code~=200 then return end 

      print(table.concat(resp)) 
    else 
     print("error match cookies!") 
    end