2012-05-15 71 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]; 

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