2011-02-14 95 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