<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Web on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/categories/web/</link>
    <description>Recent content in Web on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 03 Dec 2018 11:41:55 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/categories/web/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>flask框架的回复中显示中文utf8字符，而不是unicode-escape字符串</title>
      <link>https://ykyi.net/?p=1565/</link>
      <pubDate>Mon, 03 Dec 2018 11:41:55 +0000</pubDate>
      <guid>https://ykyi.net/?p=1565/</guid>
      <description>&lt;p&gt;今天在用flask框架写http服务的时候，发现调用flask的jsonify函数得到的http回复包中的字文是用unicode-escape string表示的。如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;&#34;&gt;u5b57\u5173\u6ce8\u6211\u4eec\uff01
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有些RESTful工具能够把unicode-escape字符串转成utf8，能够正常显示出中文。但很多编辑器和其它工具只能显示原本的unicode转义字符串，大大妨碍调试。解决方案是用flask的另一个函数：make_response解决这个问题。代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-python &#34;&gt;from flask import Flask, jsonify, make_response


def mk_utf8resp(js):
    &#39;&#39;&#39;
    传入一个字典，返回一个json格式的http回复。
    &#39;&#39;&#39;
    resp = make_response(json.dumps(js, ensure_ascii=False))
    resp.headers[&#39;Content-Type&#39;] = &#39;application/json&#39;
    return resp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把jsonify(js)换成mk_utf8resp(js)，问题解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>nginx架设HTTP服务器接受PUT方法上传文件</title>
      <link>https://ykyi.net/?p=1439/</link>
      <pubDate>Tue, 27 Mar 2018 08:46:21 +0000</pubDate>
      <guid>https://ykyi.net/?p=1439/</guid>
      <description>&lt;p&gt;最近用nginx架了个http服务器，通过http上传文件。&lt;br&gt;
nginx的配置如下：&lt;/p&gt;
&lt;pre class=&#34;line-numbers prism-highlight&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-null&#34;&gt;        location ~ ^/wraith {
            root /data/tmp;
            dav_methods PUT;
            dav_access user:r group:r all:r;
            create_full_put_path on;

            limit_except GET {
            }
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如上，子目录/wraith将接受PUT方法。&lt;/p&gt;
&lt;pre class=&#34;line-numbers prism-highlight&#34; data-start=&#34;1&#34;&gt;&lt;code class=&#34;language-null&#34;&gt;$curl -XPUT --data-binary @${TAR_PATH} --noproxy &#39;*&#39;  http://xxx.xxx.xxx.xxx/wraith/${TAR_FILE}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如上用curl通过http上传文件到服务器的/data/tmp目录下，文件命名为${TAR_FILE}&lt;/p&gt;</description>
    </item>
    <item>
      <title>MediaWiki入门教程</title>
      <link>https://ykyi.net/?p=795/</link>
      <pubDate>Sat, 23 Jun 2012 13:27:25 +0000</pubDate>
      <guid>https://ykyi.net/?p=795/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;MediaWiki是这个世界上使用人数最多的百科建站系统。全球最著名的Wikipedia.com就是用MediaWiki建立的。另外，MediaWiki是在GPL协议下免费开源工程，这意味着你可以免费使用它。下面将介绍如何使用MediaWiki.&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;如何安装mediawiki&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;如何安装MediaWiki？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;从官网下载到MediaWiki的安装包，解压到服务器的根目录下面。然后用你的域名访问网站，就会提示你一步一步安装了。注意最后一个步骤会生成一个LocalSettings.php文件，你需要把这个文件上传到网站的根目录。如果没有把生成的LocalSettings.php放到根目录，下次输入域名访问网站会提示找不到LocalSettings.php。其实整个安装都超级简单！&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;怎么使mediawiki只能够被私人使用&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;怎么使MediaWiki只能够被私人使用？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在安装阶段有这个选项配置MediaWiki会被如何使用。如果错过了，可以删除根目录下的LocalSettings.php，再输入域名访问网站重新生成LocalSetting.php。这样有点麻烦，也可以直接编辑LocalSettings。比如:&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;# 禁止未登录用户编辑内容.&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;$wgGroupPermissions[&amp;#8216;*&amp;#8217;][&amp;#8216;edit&amp;#8217;] = false;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;# 禁止用户注册，除非系统管理员创建用户。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;$wgGroupPermissions[&amp;#8216;*&amp;#8217;][&amp;#8216;createaccount&amp;#8217;] = false;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;怎么创建一个页面&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;怎么创建一个页面？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在这个例子中，我们会教你创建一个页面。页面的内容就是&#39;如何创建一个页面&#39;。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在网站的右上角上点击：登录。 然后用你的管理员账号登录。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在MediaWiki中创建一个页面的方法有点特殊。首先，你在搜索框中输入你将要编辑的词条名字，然后点击搜索。如果词条不存在的话，就会显示一个页面告诉你没有这个词条。在这个页面上会有一个选项提示你创建这个词条。点击&amp;ldquo;创建词条&amp;rdquo;。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;输入以下内容：&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;&amp;nbsp;== Create a page ==&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;* 把词条输入搜索框，然后搜索。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;* 搜索结果显示没有匹配到任何页面，这时有一个选项让你创建一个页面。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;* MediaWiki标志语言(MediaKiki Markup Language也常被称为:wikitext)可以在 http://www.mediawiki.org/wiki/Markup_spec 找到。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;* 各种编辑页面的例子可以在 http://meta.wikimedia.org/wiki/Help:Editing and http://meta.wikimedia.org/wiki/Help:Wikitext_examples 找到。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;点击&#34;预览&#34;按钮，可以看到页面的预览效果。点击&#34;保存页面&#34;，则这个页面被编辑完成了。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;怎么改名一个页面&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;怎么改名一个页面？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;有时候你想要把一个页面改名。MediaWiki处理改名的逻辑实际上是把这个页面使用新的名字移动到一个新的位置，MediaWiki会记住旧的名字，还会建立一个到新页面的引用。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在页面的上部找到&#34;移动&#34;标签页，点击!&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;填好新的页面名字，点击&#34;移动页面&#34;按钮。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;系统会让你确认一次，然后改名就完成了。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;怎么改变mediawiki的logo呢&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;怎么改变MediaWiki的Logo呢？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;常常有人问如何把网站左上方的网站Logo换掉。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;首先你创建一个宽135象素，长135-150象素的logo图象文件。把logo上传到服务器某个位置。默认是放在/skins/common/images/wiki.png。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;编辑LocalSetting.php文件，修改 $wgLogo变量。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;刷新页面，现在你可以看到新的Logo了。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;怎么在页面中建立内部链接internal-links&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;怎么在页面中建立内部链接(Internal Links)？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;不像标准的HTML语法，在编辑MediaWiki的页面时建立指向内部页面的链接是非常容易的。比如你要建立一个到词条名为&amp;ldquo;我爱香港&amp;rdquo;的内部链接，则在编辑页面时在词条名前加井号。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;如: #我爱香港&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;MediaWiki的内部链接的颜色有两种，一种是红色，一种是绿色。当内部链接的颜色是红色时，表示还没有收录这个词条，如果你点击的话，会提示你建立新词条。如果是绿色，则相反。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;
&lt;h2 id=&#34;如何改变mediawiki的导航菜单&#34;&gt;&lt;span style=&#34;font-size:16px;&#34;&gt;如何改变MediaWiki的导航菜单？&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;比如我想要把我的wiki站点上所有的category都列在导航条上，那我就需要修改导航条。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;在搜索框中输入: Mediawiki:Sidebar。搜索结果会给出导航条的页面。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;选择&amp;ldquo;编辑&amp;rdquo;。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;增加一行以**起头，|符号前面的字符表示导航项将要显示的名字，|后表示页面的名字。&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size:16px;&#34;&gt;最后选择保存页面，完成！&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-size: 16px; &#34;&gt;copyright ykyi.net&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &amp;nbsp;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>fsockopen真好用,PHP的高级别网络函数！</title>
      <link>https://ykyi.net/?p=67/</link>
      <pubDate>Mon, 01 Nov 2010 16:42:36 +0000</pubDate>
      <guid>https://ykyi.net/?p=67/</guid>
      <description>&lt;p&gt;今天用&lt;a href=&#34;http://ykyi.net/?p=40&#34;&gt;Burp工具&lt;/a&gt;分析了一个网站的大致功能后打算写程序把该网站我感兴趣的内容全抓下来。&lt;br&gt;
一开始用java写了一小段，但哥对Java不熟悉哇，而且哥觉得Java的那么多流的类，如果仅仅操作文本文件，就显得封装的太厚了。又想，用C/C++写。虽然用C/C++写的最多代码，但事实上C/C++的字符串操作一想起来就嫌烦，而且正则式也烂得可以，数组不支持用字符串索引也真够麻烦，虽然可用C++的std::map容器。最后决定用PHP写…PHP真是太好用了~~~犹赞超强大的正则式，同perl的正则式有得一拼啊。如果换用标准C字符串函数和GNU的一个超难用的C正则式库，那要写死人啊~~~&lt;/p&gt;
&lt;p&gt;最开始的思维定势就是要先开一个socket(N多参数要填入), 省略bind(操作系统自已选一个本地端口绑定)，第二步 connect 到主机，第三步往 socket 里写东西… 虽然只几个简单函数，但要填的几个参数也真够难记的。嘿，偶像发现事实上PHP提供了high-level的socket函数 fsockopen()。哇，太方便了。&lt;/p&gt;
&lt;p&gt;fsockopen()&lt;br&gt;
returns a file pointer which may be used together with the other file functions (such as fgets(), fgetss(), fwrite(), fclose(), and feof())&lt;br&gt;
fsocketopen返回一个文件指针，然后就可以用常用的文件函数操作它啦！！！和操作文本一件一样~~~ 比 Java 的 java.io.socket 类还要方便~~虽然java也抽象的不错，但我就是嫌流对象封装太厚了。人生苦短，何必自找麻烦呢。&lt;br&gt;
用完以后用 fclose 把它fsockopen返回的文件指针关掉！&lt;/p&gt;
&lt;p&gt;看个例程:&lt;/p&gt;
&lt;?php&lt;br /&gt; $fp = fsockopen(&amp;#8220;udp://127.0.0.1&amp;#8221;, 13, $errno, $errstr);

  
if (!$fp) {  
echo &amp;#8220;ERROR: $errno &amp;#8211; $errstr  
\n&amp;#8221;;  
} else {  
fwrite($fp, &amp;#8220;\n&amp;#8221;);  
echo fread($fp, 26);  
fclose($fp);  
}  
?&gt;  
&lt;p&gt;上面的例程从本机的UDP时间服务器里读取当时的时间和日期。如果你本机开了标准的时间服务的话~~~&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
