我正在使用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