【问题标题】:POST receiver (server)POST 接收器(服务器)
【发布时间】:2012-05-15 11:13:01
【问题描述】:

我发现自己需要一种方法来测试我的应用程序发出的 请求。

我将我的请求发送到http://macbook-pro.local/,我正在尝试找出我可以运行什么服务来读取和显示请求。

我查看了RestKit 没有任何运气。

使用SignalR 可以工作,但 的端口没有按预期工作。

【问题讨论】:

    标签: post macos macos http http-post netcat


    【解决方案1】:

    您想要的基本上是一个非常简单的 Web 服务器,但如果您只想打印 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”:

    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
    

    然后,每当您向http://localhost/cgi-bin/test.sh 发送 POST 请求时,它都会将 POST 数据的内容保存到您计算机上的文件 /tmp/post-data 中。

    注意:在所有示例中,如果这是您的计算机主机名,则“localhost”可以替换为“macbook-pro.local”以通过网络进行访问。

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

    【讨论】:

    • nc 函数工作得很好,但是 .sh 文件没有保存发送的帖子,但我确实得到了 OK 响应。我错过了什么吗? .sh 文件是否需要一些终端“帮助”?
    • 使用 while true; do nc -l 10000 &lt; /dev/null ; printf 'Content-type: text/plain\r\n\r\n' cat &gt; /MYDIR/post-data echo OK; done 保存文件,但仅使用 Content-type: text/plain 而不是 POST 的内容..
    【解决方案2】:

    寻找SBJson framework

    这些是您可以编写以解析 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];
    

    框架中有更多的方法可以做一些有用的事情。

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2018-08-03
      • 2021-06-26
      • 2018-09-28
      • 2013-07-19
      相关资源
      最近更新 更多