【发布时间】:2011-02-14 23:23:00
【问题描述】:
我正在使用 ASIHTTPRequest 将数据发布到 iPhone 4.2.1 上的远程服务器。当我向我们的服务器发出以下 post 请求时,我收到 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,但服务器不喜欢生成的数据格式。
任何建议将不胜感激。
谢谢。
【问题讨论】:
标签: ios4 curl asihttprequest