我发现自己需要一种方法来测试从我的应用程序发出的发布请求。
我将我的请求发送到http://macbook-pro.local/
,并试图找出我可以运行什么服务来读取和显示请求。
我在没有任何运气的情况下调查了RestKit 。
你想要的基本上是一个非常简单的 Web 服务器,但如果你想要的只是打印出 HTTP POST 请求中的内容,你可以使用内置的“nc”命令。您可以使用终端通过在这样的循环中运行“nc”来打印本地端口 10000 上传入请求的内容:
while true; do nc -l 10000 < /dev/null ; printf '\n\n\n'; done
然后,您可以http://localhost:10000
在浏览器中访问并查看 HTTP 请求出现在您的终端窗口中。网络浏览器将给出错误消息,因为“nc”不够聪明,无法回复。
要测试 HTTP POST 请求,您可以使用“curl”:
curl --data "this-is-POST-data" http://localhost:10000
同样,curl 会给出一条错误消息,因为 'nc' 只是关闭连接而没有给出正确的 HTTP 回复。您可以使用静态 HTTP 响应对所有请求进行“nc”回复,如下所示:
while true; do printf 'HTTP/1.0 200 OK\r\nContent-type: text-plain\r\n\r\nHello, world!' | nc -l 10000 ; printf '\n\n\n'; done
如果您需要使用端口 80,您需要以 root 身份运行“nc”(例如使用“sudo”)。
但是,如果您需要进行任何类型的真实 HTTP 流量,则需要获得合适的 Web 服务器。OS X 带有 Apache Web 服务器,可以使用命令“apachectl start”(“apachectl stop”来停止它)启动它。CGI 已启用,因此您可以将可执行文件放入 /Library/WebServer/CGI-Executables 并使用http://localhost/cgi-bin/filename
. 例如,如果您创建以下 CGI 脚本:
#!/bin/sh
printf 'Content-type: text/plain\r\n\r\n'
cat > /tmp/post-data
echo OK
称它为“test.sh”并将其放在 CGI-Executables 文件夹中,然后运行:
chmod +x /Library/WebServer/CGI-Executables/test.sh
然后,每当您向其发送 POST 请求时http://localhost/cgi-bin/test.sh
,会将 POST 数据的内容保存到计算机上的文件 /tmp/post-data 中。
注意:在所有示例中,如果这是您的计算机主机名,则“localhost”可以替换为“macbook-pro.local”以通过网络进行访问。
另请注意,您的 OS X 防火墙权限可能会阻止“nc”和其他软件侦听 TCP 端口。通常你应该得到一个权限对话框,但如果你只是得到“权限被拒绝”,请在系统偏好设置 -> 防火墙 -> 防火墙选项中调整你的防火墙设置。
这些是您可以编写以解析 GET 数据的示例行。
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *dict = [parser objectWithData:urlData];
[dictionary setDictionary:dict];
[parser release];
这些是您可以写入 POST 数据的示例行。
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
jsonStr = [writer stringWithObject:dictionary];
[writer release];
框架中有更多方法可以做一些有用的事情。