So come generare una chiave utente utilizzando l'API pastebin, ma come posso utilizzare questo userkey per accedere a una copia privata non elaborata?Come posso accedere a una pasta privata grezza da pastebin?
Sto usando Lua per questo.
So come generare una chiave utente utilizzando l'API pastebin, ma come posso utilizzare questo userkey per accedere a una copia privata non elaborata?Come posso accedere a una pasta privata grezza da pastebin?
Sto usando Lua per questo.
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).
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!
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