有哪些工具可以通过 HTTP 使系统上的手册页可用并将主题链接在一起,以便各SEE ALSO节和其他地方的引用将成为手册页的 HTML 表示中的超链接?
我目前正在使用 Debian (6) 和 Ubuntu (10.04, 10.10),所以现有的软件包将是首选,但如果它们明显优越,我也会选择任何其他解决方案。
就我而言,问题出在 SourceForge.net 上。其实我是想下载这些文件:
http://sourceforge.net/projects/wxpython/files/wxPython/2.9.4.0/wxPython-src-2.9.4.0.tar.bz2/download
http://sourceforge.net/projects/wxpython/files/wxPython/2.9.4.0/wxPython-docs-2.9.4.0.tar.bz2/download
Run Code Online (Sandbox Code Playgroud)
事情并不顺利,所以我记录了wget,日志文件是:
--2012-08-21 09:52:17-- http://sourceforge.net/projects/wxpython/files/wxPython/2.9.4.0/wxPython-src-2.9.4.0.tar.bz2/download
Resolving sourceforge.net... 216.34.181.60
Connecting to sourceforge.net|216.34.181.60|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18846 (18K) [text/html]
Saving to: `download'
0K .......... ........ 100% 6.30K=2.9s
2012-08-21 09:52:25 (6.30 KB/s) - `download' saved [18846/18846]
--2012-08-21 09:52:25-- http://sourceforge.net/projects/wxpython/files/wxPython/2.9.4.0/wxPython-docs-2.9.4.0.tar.bz2/download
Connecting to sourceforge.net|216.34.181.60|:80... connected.
HTTP request sent, awaiting response... 200 OK
The file is already fully retrieved; nothing to do.
FINISHED --2012-08-21 09:52:28--
Downloaded: 1 files, 18K in 2.9s (6.30 KB/s)
Run Code Online (Sandbox Code Playgroud)
正如你在这个日志文件中看到的,我最终得到了一个 …
正常的 HTTP 请求可能如下所示:
获取/HTTP/1.1 主机:example.com
我想用自定义的方式更改此请求的第一行,例如:
FOOBAR 不是真正的 HTTP 主机:example.com
是否可以使用curl或其他工具来做到这一点,能够做到这一点?
我正在尝试每 2 小时制作一次 httpry 日志。我将此添加到我的logrotate.conf文件中:
/var/log/httpry/*.log {
rotate 1
weekly
create 640 root admin
missingok
notifempty
}
Run Code Online (Sandbox Code Playgroud)
我尝试将每周更改为每小时(仍然需要每 2 小时更改一次),但它不起作用。我阅读将脚本从 cron.daily 复制到 cron.hourly 但我所有的 cron 文件都是空的。
如何每 2 小时创建一个新的日志文件?
我正在使用socat转储普通 TCP(例如 HTTP)流量:
socat -v tcp-listen:$PORT,reuseaddr,fork,keepalive tcp:$TARGET_HOST:$TARGET_PORT
Run Code Online (Sandbox Code Playgroud)
目前,所有发送和接收流量都转储到输出流中。我想将发送/接收拆分为单独的文件。
socat而不使用任何外部文本处理工具?我有一个使用 nginx 托管一个简单网站的 Raspberry Pi。RPi 充当无线接入点 - 用户可以连接到其无线网络,RPi 为他们提供一个 IP(它运行 DHCP 服务器),他们可以访问该站点。
因为 RPi 实际上并不为用户提供互联网(只有这一个站点),所以我让用户更容易找到该站点。我没有知道该站点的确切 URL,而是告诉我的 dns 服务器 (dnsmasq),DHCP 服务器告诉客户端使用它来解析对我的 RPi (192.168.30.1) 的 LAN IP 的所有查询。
此时,我的 nginx 在其配置中有一个条目,内容为:
这很棒。
我想更进一步。当 Android 连接到无线网络时,它会尝试连接到http://connectivitycheck.gstatic.com/generate_204(或其他类似的谷歌页面之一),专门检查请求是否被重定向。如果它得到 204 代码,则假定一切正常。如果没有,则假定它位于强制门户后面,并弹出一个浏览器窗口,打开强制门户登录。
出于某种原因,当我告诉 nginx 使用 302 重定向或什至 200(带有一些文本)响应对 generate_204 页面的请求时,Android 不会弹出浏览器。
我有一个带有内置热点功能的 mikrotik 路由器,它确实让 android 使用强制门户登录(在同一个测试手机上)弹出浏览器。当我查看它发送给我的客户端的流量时,它是一个简单的 HTTP 200,带有一些文本,就像我的一样。
似乎可行的一件事是,如果我禁用 DNS 服务器将所有内容解析为 192.168.30.1,并使用 iptables 将端口 80 重定向到我的 RPi 上的 localhost。
有谁知道为什么在 Android 的 Captive Portal 检测中重定向端口 80 有效,但配置 DNS 服务器以将所有内容解析为 …
有没有办法从本地运行的 tcp 服务器上提供网页服务,该服务器监听 unix 域套接字而不是localhost:<port>?
就像是:
file:///tmp/webpage.sock
Run Code Online (Sandbox Code Playgroud)
我唯一真正的动机是避免 2000-5000 范围内的端口冲突。
我需要查看应用程序发送和接收的整个 HTTP 数据包以进行调试。这如何在命令行中完成?
#!/bin/bash
echo "$(curl -s -I https://google.com|grep Server)" abc
Run Code Online (Sandbox Code Playgroud)
返回:
abcer: gws
Run Code Online (Sandbox Code Playgroud)
并bash -x显示:
++ grep Server
++ curl -s -I https://google.com
' abco 'Server: gws
abcer: gws
Run Code Online (Sandbox Code Playgroud)
但
echo abc "$(curl -s -I https://google.com|grep Server)"`
Run Code Online (Sandbox Code Playgroud)
返回
abc Server: gws
Run Code Online (Sandbox Code Playgroud)
换句话说,如果我在 curl 命令之后添加文本,它会被破坏,但是如果我在 curl 之前添加它就可以了。
怎么了?我想不明白。
在 bash shell scipt 中,我使用了几个命令行工具(wget、curl、httpie)来测试我的 http 服务器。
当使用例如 curl 调用 GET 请求时,我看到一个 tcp 连接被打开到我的服务器并在 http 通信完成后立即关闭。
$ curl http://10.5.1.1/favicon.ico -o /dev/null
Run Code Online (Sandbox Code Playgroud)
为了更好地测试我的服务器的保持活动行为,我希望在多个 http 请求/响应周期内保持 tcp 连接打开。
我可以像这样直接从 bash 执行糟糕的 http 请求:
exec 3<>/dev/tcp/10.5.1.1/80
printf "GET /\r\n\r\n" >&3
while IFS= read -r -u3 -t2 line || [[ -n "$line" ]]; do echo "$line"; done
exec 3>&-
exec 3<&-
Run Code Online (Sandbox Code Playgroud)
但是因为我的测试通信要复杂得多(包括身份验证等),我不想完全自己用 bash 或其他脚本语言编写代码,而是想使用现有工具。现在的想法是首先在 bash 中打开一个 tcp 套接字,然后强制某些命令行工具使用此连接而不是打开自己的套接字。也许是这样;
exec 3<>/dev/tcp/10.5.1.1/80
curl http://10.5.1.1/message.txt --use-existing-socket-fd=3
# ... do some other …Run Code Online (Sandbox Code Playgroud)