2012-05-15 53 views
0

我有一个应用程序发出一个POST RequestOS X - POST reciver(服务器)

我需要我的Mac到阅读该发布请求。

所以我POSThttp://macbook-pro.local/我需要一些代码,可以读取,并显示/保存我从我的应用程序发送的内容。 (Javascript,PHP,Html?)

我看着RestKit没有任何接收数据的运气。

使用SignalR可以工作,但到OS X的端口对我来说工作不太好。

回答

1

你想要的基本上是一个非常简单的网络服务器,但如果你只想打印出HTTP POST请求中的内容,那么你可以使用内置的'nc'命令逃脱。您可以使用终端上打印出本地10000端口传入的请求的内容,通过在这样的循环中运行“NC”:

while true; do nc -l 10000 < /dev/null ; printf '\n\n\n'; done 

然后,您可以去http://localhost:10000在浏览器中看到的HTTP请求出现在您的终端窗口。网络浏览器会给出一个错误消息,因为'nc'不够聪明,无法回复。

要测试HTTP POST请求,您可以使用“卷曲”:

curl --data "this-is-POST-data" http://localhost:10000 

同样,卷曲会给出错误信息,因为“NC”简单地关闭,不给予适当的HTTP应答的连接。你可以有“NC”像这样一个静态的HTTP响应所有请求回复:

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,你需要运行(例如,使用“须藤”)“NC”为根。

但是,如果您需要进行任何类型的真实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 

称之为“测试”。SH”,并将其放置在CGI-可执行文件的文件夹,然后运行:

chmod +x /Library/WebServer/CGI-Executables/test.sh 

然后,只要发送POST请求http://localhost/cgi-bin/test.sh将POST数据的内容保存到文件/ tmp /数据后在您的计算机上注意

:在所有案例中,“本地主机”,可以用“的MacBook-pro.local”通过网络访问取代,如果这是你的计算机主机名

另外请注意,您的OS X。防火墙权限可能会阻止'nc'和其他软件侦听TCP端口。通常您应该获得权限对话框,但如果您只是获得“权限拒绝“,请在”系统预置“ - >”防火墙“ - >”防火墙选项“中调整防火墙设置。

+0

'nc'函数正在工作,但是.sh文件不保存已发送的帖子,但是我确实收到了回复。我错过了什么吗? .sh文件是否需要某个终端“帮助”? –

+0

使用'while true;做nc -l 10000/MYDIR/post-data echo OK; done'保存文件,但仅限于Content-type:text/plain而不是'POST'的内容。 –

+0

我得到了我的答案,http://stackoverflow.com/questions/14762083/cgi-script-save-的printf到文件使用末端-OS-X –

2

查找SBJson framework

这些样品线ü可以写解析获取数据。

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]; 

还有更多的方法在框架中做一些有用的东西。