ASIFormDataRequest有空的POST主体

时间:2011-07-29 08:54:56

标签: objective-c http macos

我有一个正在运行的MacOS应用程序正在向服务器发送POST。我更改了POST的URL,然后停止了工作。

我下载了Tuffcode(一个嗅探器),它告诉我在使用新网址时,POST BODY是空的!

- (IBAction)grabURLInBackground:(id)sender
{
    NSURL *url = [NSURL URLWithString:@"url1"];
    //NSURL *url = [NSURL URLWithString:@"url2"];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request addRequestHeader:@"Content-Language" value:@"en"];
    [request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];
    [request addRequestHeader:@"Connection" value:@"keep-alive"];
    [request addRequestHeader:@"Cookie" value: [NSString stringWithFormat:@"botcust2=%@", sn]];
    [request setShouldAttemptPersistentConnection:NO];

    [request addPostValue:[input stringValue] forKey:@"input"];
    [input setStringValue:@""];
    [request startAsynchronous];

}

从url1切换到url2从形式良好的POST BODY变为空POST BODY。怎么会这样? URL如何确定发送的内容? 起初我以为是新服务器没有正确解释POST,但如果Tuffcode正确,应用程序甚至不发送数据??

或者也许我不了解HTTP的工作原理?我很困惑......

一些日志:

2011-07-29 12:28:36.018 ChatBot[6764:707] [STATUS] Starting asynchronous request <ASIFormDataRequest: 0x10188d420>
2011-07-29 12:28:36.021 ChatBot[6764:6403] 
==== Building an application/x-www-form-urlencoded body ====
input=hello
==== End of application/x-www-form-urlencoded body ====
2011-07-29 12:28:36.027 ChatBot[6764:6403] [CONNECTION] Request <ASIFormDataRequest: 0x10188d420> will not use a persistent connection
2011-07-29 12:28:36.280 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> finished uploading data
2011-07-29 12:28:36.374 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> received response headers
2011-07-29 12:28:36.375 ChatBot[6764:6403] [STATUS] Request <ASIFormDataRequest: 0x10188d420> finished downloading data (0 bytes)
2011-07-29 12:28:36.376 ChatBot[6764:6403] [STATUS] Request finished: <ASIFormDataRequest: 0x10188d420>

2 个答案:

答案 0 :(得分:0)

为什么在发布后立即将字符串设置为空?

[request addPostValue:[input stringValue] forKey:@"input"];
[input setStringValue:@""];

编译器可能正在切换这两行的顺序,并且您正在提交该空字符串。你为什么不尝试删除第二行?

答案 1 :(得分:0)

事后一点点,但我遇到了类似的事情。像你一样我有一个ASIHTTPRequest设置来处理应用程序的先前实例,但在新版本中POST是空的(没有数据发送);我知道另一端的服务器工作正常(相同的代码,但新托管/ URL)所以我知道它不可能。

玩了一会儿之后我记得旧的URL是submission.php,但这次是它自己的文件夹(所以只是/ submission /),将index.php添加到我的新网址末尾神奇地制作事情再次奏效;所以我猜它只是不喜欢在URL的末尾没有文件。

tl; dr - 确保您的提交网址以文件名结尾(即:index.php或类似名称)

NBSP