我正在使用ASIHTTPRequest将数据发布到iPhone 4.2.1上的远程服务器。当我提出以下POST请求到我们的服务器,我得到一个400响应(我删除了IP地址):ASIHTTPRequest POST分割头+数据?
NSString dataString = @"data1=00&data2=00&data3=00";
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:<ipremoved>]]];
[request appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"User-Agent" value:@"iphone app"];
[request addRequestHeader:@"Content-Type" value:@"application/octet-stream"];
request.delegate = self;
[request startAsynchronous];
当我发送使用curl相同的数据,我收到一个200响应:
curl -H "User-Agent: iphone app" -H "Accept:" -H "Content-Type:application/octet-stream" --data-ascii "data1=00&data2=00&data3=00" --location <ipremoved> -v
我的同事指出,在失败的情况下,ASIHTTPRequest需要两个套接字读取:一个用于标题,一个用于数据。显然,服务器目前没有配置正确解析,所以我试图解决它。
如果我在iPhone和我的Mac之间设置代理并运行Paros(查看数据包),问题就会消失。 Paros将标题和数据结合在一起,以便在单个套接字读取中由服务器获取。
我已经尝试了其他职位建议的一些事情,包括禁用持久连接,但我没有任何运气。我也试过做一个ASIHTTPFormRequest,但服务器不喜欢生成的数据格式。
任何建议,将不胜感激。
谢谢。
我能够在我的端确认完整的HTTP请求是在两个TCP段中发送的 - 一个只包含标题,另一个包含数据。 Paros在发送它之前将这两个TCP段简单地组合成单个TCP段。我同意服务器似乎损坏或至少配置不当。 – 2011-02-15 18:10:32