2011-02-14 100 views
1

我正在使用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,但服务器不喜欢生成的数据格式。

任何建议,将不胜感激。

谢谢。

回答

0

“我的同事中指出,在 失败的情况下,ASIHTTPRequest 需要两个插槽写着:一个用于 头,一个用于数据 显然,服务器目前还不能 配备解析这个正确,所以我 正试图解决它。“

你是否知道这个事实,还是猜测?这样的HTTP服务器会非常破碎,并且会导致各种随机问题。

你看过帕罗斯正在接收什么,它发送了什么?它有可能偶然修正请求中的错误,并且如果是这样,则可以用相同的方式修复请求。

+0

我能够在我的端确认完整的HTTP请求是在两个TCP段中发送的 - 一个只包含标题,另一个包含数据。 Paros在发送它之前将这两个TCP段简单地组合成单个TCP段。我同意服务器似乎损坏或至少配置不当。 – 2011-02-15 18:10:32