Ios4 ASIHTTPRequest POST拆分标题+;数据?

Ios4 ASIHTTPRequest POST拆分标题+;数据?,ios4,curl,asihttprequest,Ios4,Curl,Asihttprequest,我正在使用ASIHTTPRequest将数据发布到iPhone 4.2.1上的远程服务器。当我向我们的服务器发出以下post请求时,我得到一个400响应(我删除了IP地址): NSString dataString=@“data1=00&data2=00&data3=00”; ASIHTTPRequest*request=[AsiHttpRequestWithURL:[NSURL URLWithString:[NSString stringWithFormat:]]; [请求appendPost

我正在使用ASIHTTPRequest将数据发布到iPhone 4.2.1上的远程服务器。当我向我们的服务器发出以下post请求时,我得到一个400响应(我删除了IP地址):

NSString dataString=@“data1=00&data2=00&data3=00”;
ASIHTTPRequest*request=[AsiHttpRequestWithURL:[NSURL URLWithString:[NSString stringWithFormat:]];
[请求appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
[请求设置请求方法:@“POST”];
[请求addRequestHeader:@“用户代理”值:@“iphone应用程序”];
[请求addRequestHeader:@“内容类型”值:@“应用程序/八位字节流”];
request.delegate=self;
[请求启动同步];
当我使用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
curl-H“用户代理:iphone应用程序”-H“接受:”-H“内容类型:应用程序/八位字节流”--data ascii“data1=00&data2=00&data3=00”--位置-v
我的同事说,在失败的情况下,ASIHTTPRequest需要两个套接字读取:一个用于头,一个用于数据。显然,服务器目前还不能正确解析这个问题,所以我正在尝试解决这个问题

如果我在iPhone和Mac之间设置一个代理并运行Paros(查看数据包),问题就会消失。Paros将头和数据结合起来,以便服务器在一次套接字读取中获取所有数据

我在其他帖子中尝试了一些建议,包括禁用持久连接,但我没有任何运气。我还尝试过执行ASIHTTPFormRequest,但服务器不喜欢生成的数据格式

如有任何建议,将不胜感激

谢谢

“我的同事说 故障案例,ASIHTTPRequest 需要两个套接字读取:一个用于 标题和一个用于数据。 显然服务器目前不可用 我已经准备好正确解析这个了,所以我 我正在努力解决这个问题。”

你知道这是事实,还是猜测?这样的HTTP服务器将非常脆弱,并将导致各种随机问题


你有没有看过防止外空军备竞赛收到了什么和发出了什么?有可能是偶然修复了请求中的错误,如果是,您可以用同样的方法修复请求。

我能够确认完整的HTTP请求是通过两个TCP段发送的,一个只包含头,另一个包含数据。在发送之前,Paros只需将这两个TCP段合并为一个TCP段。我同意服务器看起来确实坏了,或者至少配置不正确。这真的有点奇怪-如果请求超过1500字节怎么办?它将/必须/必须被分成两个包。我知道Paros做的最明显的事情是合并两个数据包(很抱歉在这里重复了这一点,但是http代理重写请求是很常见的):您是否逐字节检查了数据包并确保这是唯一的区别?我可以实实在在地验证ASIHttpRequest正在做的事情,我在我的mac电脑上安装了Wireshark,并看着它发生。我正在处理同样的问题,因为同样的服务器端问题-我的问题是它是一个我无法控制的第三方系统-在他们这方面,他们基本上做了相同的组合,并经历了相同的过程,不确定从这里走向何方
    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