分类目录归档: 学习日志

SQLite数据库修复

最近遇到打开sqlite数据库报"database disk image is malformed"错误,网上Google找的前几个方法都没解决,后找到一个能解决的方法在此记录一下。

//生成sql

sqlite3 data.db .dump > data.sql

//手动检查sql文件,这也是Google前几个方法没提到的,造成后面生成新的数据库为0KB

用编辑器打开刚刚生成的 data.sql 看看文件的最后一行是不是

ROLLBACK; -- due to errors

是则把它删掉,并加上
COMMIT;
如果最后一行是 COMMIT; 则忽略此步骤。

//新建一个数据库,导入sql

sqlite3 new.db < data.sql

//检查

sqlite3 new.db "pragma integrity_check"


参考 https://my.oschina.net/ZntxCYL/blog/535306

go get 命令设置代理

众所周知的原因,使用 go get 下载不了某些开源工程或者非常慢。

网上找了一些办法发现好用,在此做下笔记。

前提是自己有 SS windows客户端。

在控制台分别输入

set http_proxy=http://127.0.0.1:1080
set https_proxy=http://127.0.0.1:1080

端口号看自己的设置,然后用 go get 命令。

LoadLibrary在Win10上的一个坑

LoadLibrary函数在MSDN中有这么一段话

If the string specifies a module name without a path and the file name extension is omitted, the function appends the default library extension .dll to the module name. To prevent the function from appending .dll to the module name, include a trailing point character (.) in the module name string.

也就是LoadLibrary可以加载没有.dll后缀的dll文件,只要在文件后面加个点。

但最近遇到在Windows10系统下面就是败了,GetLastError返回126,至于为什么未知,解决方法就是文件名乖乖加上.dll后缀。


libcurl POST数据大于1024个字节需要注意的问题

    最近在测试libcurl使用代理的功能,发现自己的数据在正常情况下可以post,在使用http代理软件Anon的时候post大于1024个字节时失败了。

尝试其他代理服务器软件又可以,如tinyproxy、kingate,这样只能怀疑是代理服务软件Anon的问题了。

使用IE测163邮箱上传大文件没问题,又怀疑会是否自己代码的问题了。

最后抓包逐一排查发现了这个 Expect: 100-continue 没见过的东西。

谷歌一下得出:

在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步

1. 发送一个请求, 包含一个Expect: 100-continue, 询问Server使用愿意接受数据

2. 接收到Server返回的100-continue应答以后, 才把数据POST给Server

这是libcurl的行为.

具体的RFC相关描述: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

于是,这样就有了一个问题, 并不是所有的Server都会正确应答100-continue, 比如lighttpd, 就会返回417 “Expectation Failed”, 则会造成逻辑出错

要解决的办法也挺容易:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // Disable Expect: header (lighttpd does not support it)

也就是说Anon代理软件也会出这个问题。

参考:http://www.laruence.com/2011/01/20/1840.html