- -。我也是这样,用 ssh 翻了 qiang 就可以 push 了。。。。
- -。在校,大二。。。。
- -。这货的 tag 管理方式还是不习惯。。。
- -。无法直视
已经走 34 了 - -。
- -。我们的学校的教育网没有问题。。
- -。一眼扫过差点看成 sublime text 开源。。。。
#70 楼 @iBachue 一个社区的文化本来就是由社区里的人来推动的,vim-scripts 将 vim.org 里的插件存放到 github 上去,这本就是一种对社区文化的引导。github 2008 才成立,Vim 的历史要长的多,其中的历史包袱自然比较重,现在 Vim 社区已经开始从 vim.org 上那种插件安装方式向 vundle 这类插件所使用安装方式转变,这是一种社区文化的转变,但这种转变需要时间,也需要社区里的人去推动。就我而言,我现在所使用的插件都可以用 vundle 来管理,这是我的 bundle 列表 https://gist.github.com/edgarwang/857189b5f20cbcc3f20b
#68 楼 @blacktulip - -。程序员中通用的引发争论的话题。。。。
#62 楼 @iBachue http://vim-scripts.org/ - -。这个才是目前 Vim 插件真正的集中地吧。
#41 楼 @1272729223 我不是 Mac 用户,所以无能为力...- -。
- -。话说 Vim 现在似乎就支持用 Python, Ruby, Lua 等写插件吧?难道要把 Vim 中的 Python 加强到和 VimScript 同等地位么。
- -。这只是初步规划,不知道什么时候才能出。。。
- -。这是中英文符号的问题吧
- -。两边声音大小不一,好不习惯。。。
- -,一直没有去注册人人....
- -。看着很酷,但是感觉没有一开始的版本直观了。。。
多谢总结,赞一个~
太好了,今晚升级时刚好遇到这个问题,现在就升级了,大赞!
#coding: utf-8
class DCPatronClient < Patron::Session
attr_accessor :get_header,:post_header,:cookie,:cookie_hash
private:initialize
def initialize
super
@cookie_hash = {"SINFORSESSID"=>"","LifeTime"=>"3600","PHPSESSID"=>""}
end
def DCPatronClient.get_client(url, connect_timeout=120000, insecure=true)
@sess = DCPatronClient.new
@sess.insecure = insecure
@sess.base_url = url
@sess.connect_timeout = connect_timeout
@sess.timeout = connect_timeout/1000
#@sess.handle_cookies # req.headers = self.headers.merge(headers),由于需要手动维护cookie,因此这里不需要加上内部的维护
@sess.get_header={"User-Agent"=>" Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)"}
@sess.post_header={"User-Agent"=>" Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)"}
return @sess
end
#构造post请求
def form_post(uri, data)
@post_header["Content-Type"]= "application/x-www-form-urlencoded"
# ATT::KeyLog::debug "uri:#{uri},data:#{data}"
ret=nil
times = 0
2.times do
begin
ret = super_post(uri, data, @post_header)
times +=1
rescue Patron::Error
ret=nil
if $!.to_s.include?("transfer closed with outstanding read data remaining")#修改登录端口会返回此错误,实际修改成功
ret.body = "{\"success\":true,\"data\":[],\"total\":4,\"time\":0,\"img\":null}"
end
ATT::KeyLog.info("#{$!.to_s},http error,retrying...")
rescue JSON::ParserError
ATT::KeyLog.info("#{$!.to_s},need to login,retrying...")
if not islogin?(ret) && times >0
relogin
else
ATT::KeyLog.error("json parse error,server response:#{ret.body[0..20]}")
end
ret=nil
rescue
ret=nil
sleep(10)
ATT::KeyLog.info("#{$!.to_s},other error,retrying...")
end
break unless ret==nil
end
res = OpenStruct.new
res.url = ret.url
res.status = ret.status
res.status_line = ret.status_line
res.redirect_count = ret.redirect_count
res.headers = ret.headers
if res.status.to_s[0,1] != "2"
res.body = "{\"success\":false, \"msg\":\"response error, code: #{ret.status}\", \"errorno\":-8}"
else
if ret.body.index(":undefined")#修正json返回不标准的情况
ret.body.gsub!(":undefined",":false")
end
#ATT::KeyLog::debug "status_line:#{ret.status_line},header:#{ret.headers},body:#{ret.body}"
hash = JSON.parse(ret.body)
if hash["success"] == true
hash.store("errorno", 0)
hash.store("msg", "default success msg while original msg is null") if hash["data"].nil?
elsif hash["success"] == false && hash["msg"].to_s ==""
hash.store("errorno", -255)
hash.store("success", false)
hash.store("msg", "unknow error type")
end
res.body = hash.to_json
end
return res
end
def islogin?(ret)
begin
if ret.body.include?("ActiveX")&&ret.body.include?("Dkey")
return false
else
return true
end
rescue
return false
end
end
def hash_to_comma(hash)
ret = ""
hash.each {|key, value| ret = "#{key}=#{value};#{ret}"}
return ret
end
def super_post(uri, data, header={})
#ATT::KeyLog::debug "uri:#{uri},data:#{data}"
Patron::Session.instance_method("post").bind(self).call(uri, data, header)
end
def relogin
passwd=Digest::MD5.hexdigest($dcpasswd)
ATT::KeyLog.info("relogin user:#{$user} password:#{$dcpasswd},MD5:#{passwd}")
login_query = "login_user=#{$user}&login_password=#{passwd}&login_pin=&in=&pwd=&dkey=&login=true"
ret = super_post("/src/acloglogin.php",login_query,@get_header)
#如果有set cookie,则表示需要提取cookie啦!~
# @cookie = ret.headers["Set-Cookie"].to_s=="" ? @cookie : ret.headers["Set-Cookie"].split(";")[0] #PHPSESSID=d1a4cfefb265cc2cb1f3ccdd7cdb437e; path=/
# @cookie += ";LifeTime=3600; SINFORSESSID="
# @post_header["Cookie"] = @cookie+Time.now.to_i.to_s
@cookie_hash = {"SINFORSESSID"=>"","LifeTime"=>"3600","PHPSESSID"=>""}
@cookie_hash["PHPSESSID"] = ret.headers["Set-Cookie"].to_s=="" ? @cookie_hash["PHPSESSID"] : ret.headers["Set-Cookie"].split(";")[0]
@cookie_hash["PHPSESSID"] = @cookie_hash["PHPSESSID"].split("=")[1] if @cookie_hash["PHPSESSID"].include?("PHPSESSID")
@cookie_hash["SINFORSESSID"] = Time.now.to_i.to_s
@post_header["Cookie"] = hash_to_comma(@cookie_hash)
@post_header["Content-Type"]= "application/json"
@post_header["x-requested-with"]= "XMLHttpRequest"
if islogin?(ret)
ATT::KeyLog.info "Login datacenter ok..."
return true
else
ATT::KeyLog.error "Login datacenter error:#{ret.body[0..20]}..."
return false
end
end
def logout
ret = get("/src/acloglogin.php?in=1&logout=1",@get_header)
ATT::KeyLog.info "logout query ret:#{ret}"
end
def hash_to_and(hash)
ret = ""
hash.each do |key, value|
if value.class == String
ret = "#{key}=#{URI.encode(value)}&#{ret}"
else
ret = "#{key}=#{value}&#{ret}"
end
end
ret
end
#封装get请求
def get(url, data)
get_header = @post_header
get_header["Content-Type"]= "application/x-www-form-urlencoded"
get_header.delete("x-requested-with")
uri = nil
uri = url
if data != nil
if uri.to_s.include?("?")
uri << "&"
else
uri << "?"
end
uri << hash_to_and(data)
end
ATT::KeyLog.info("uri:#{uri}")
return super(uri,get_header)
end
end
2333,莫名的笑了 - -