She Ziyu
setwd("C:/")
getwd()
library(RCurl)
library(rjson)
library(stringr)
library(XML)
library(PKI)
# library(tools)
# library(digest)
# library(Rweibo)
t <- floor(as.numeric(Sys.time())*1000)
prelogin_url <- paste("https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18)&_=",t,sep="")
text1 <- getURL(prelogin_url)
tmp <- fromJSON(gsub("sinaSSOController.preloginCallBack\\(\\{(.*)\\}\\)","\\{\\1\\}",text1))
u <- "********"
u <- gsub('@','%40',u)
su <- base64(u)[1]
pw <- "********"
key_p <- tmp$pubkey
key_p_p <- ""
for(i in 1:(str_length(key_p) / 2)){
key_p_p <- unclass(as.hexmode(tolower(str_sub(key_p,(2 * i-1),(2*i)))))
}
# as.raw(key_p_p)
# 改进:规则
pubkey_p <- PKI.mkRSApubkey(as.raw(key_p_p),exponent=65537L,format="key")
# pubkey_p <- PKI.mkRSApubkey(as.raw(key_p_p),exponent=65537L,format="DER")
# pubkey_p <- PKI.mkRSApubkey(as.raw(key_p_p),exponent=65537L,format="PEM")
keyword <- paste(tmp$servertime,"t",tmp$nonce,"n",pw,sep="")
passwd <- PKI.encrypt(charToRaw(keyword),pubkey_p)
passwd <- paste(as.character(passwd),sep="",collapse="")
loginurl <- "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)"
loginData <- c(
"entry"="weibo",
"gateway"="1",
'from'="",
"savestate"="0",
"useticket"="1",
"pagerefer"="http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F",
"vsnf"="1",
"su"=su,
"service"="miniblog",
"servertime"=tmp$servertime,
"nonce"=tmp$nonce,
"pwencode"="rsa2",
"rsakv"=tmp$rsakv,
"sp"=passwd,
"sr"="1366*768",
"encoding"="UTF-8",
"prelt"="0",
"url"="http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack",
"returntype"="META"
)
h <- basicHeaderGatherer()
header <- c(
# "Host"="login.sina.com.cn",
# "Referer"="http://weibo.com/",
# "User-Agent"="Mozilla/5.0 (Windows NT 10.0; rv:49.0) Gecko/20100101 Firefox/49.0",
# "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
# "Accept-Language"="zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
# # "Accept-Encoding"="gzip, deflate, br",
# "Connection"="keep-alive",
"Content-Length"=25,
"Content-Type"="application/x-www-form-urlencoded",
"Cookie"="********"
)
ch1 <- getCurlHandle(verbose=TRUE,headerfunction=h$update)
text2 <- postForm(loginurl,.params=loginData,style="post",curl=ch1)
text2
顺便问一下"Content-Length"是什么意思呢?如何计算得到?