ASIHTTPRequest POST拆分头+数据?

时间:2011-02-14 23:23:01

标签: ios4 curl asihttprequest

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

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

任何建议都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

  

“我的同事说,在   失败案例,ASIHTTPRequest   需要两个套接字读取:一个用于   标题和一个数据。   显然服务器目前不是   有能力解析这个,所以我   我正试图解决它。“

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

您是否看过Paros正在接收的内容以及发送的内容?它可能会在请求中偶然修复错误,如果是,您可以以相同的方式修复请求。