我有點瘋狂的問題。我有一個IIS7,我需要通過POST發佈一個公式,我也需要通過NTLM進行身份驗證,所有這些東西都會引發SSL連接。到目前爲止,我管理它連接到服務器併發布我的數據。如何解決我的應用程序的android源代碼中的錯誤?
在POST之後,我會成功的將302重定向到第二頁。 DefaultHttpClient連接到Web服務器進行身份驗證併發布數據。到目前爲止,一切正常但是現在客戶關閉了連接並打開了第二個連接(這個行爲對我有用),但這不是我的問題。在第二個連接上,客戶端忘記了如何在IIS上進行身份驗證,並打破401身份驗證錯誤。
到目前爲止,我可以看到這是一個固定的錯誤source of DefaultHttpClient,但Android似乎使用這個lib的舊版本。我該如何解決這個似乎在世界上每個Android設備上的錯誤?
這裏是我的通信相關部分:
POST /login/ HTTP/1.1
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
Host: example.com
Connection: Keep-Alive
Cookie: ASPSESSION...
[the post data]
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/7.5
WWW-Authenticate: NTLM
Content-Length: 1344
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
...
</html>
POST /login/ HTTP/1.1
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
Host: example.com
Connection: Keep-Alive
Cookie: ASPSESSION...
Authorization: NTLM ABC...==
[the post data]
HTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: NTLM ABC...DEF
Content-Length: 341
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Not Authorized</TITLE>...</HTML>
POST /login/ HTTP/1.1
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
Host: example.com
Connection: Keep-Alive
Cookie: ASPSESSION...
Authorization: NTLM ABC...DEF
[the post data]
HTTP/1.1 302 Moved Temporary
Cache-Control: private,no-cache
Pragma: no-cache
Content-Length: 31
Content-Type: application/json; Charset=UTF-8
Expires: Fri, 07 Dec 2012 07:01:00 GMT
Location: /login/step2.asp
Server: Microsoft-IIS/7.5
Set-Cookie: [...] path=/login/; HttpOnly;
Persistent-Auth: true
[some response]
---現在這樣的引黃密切和第二HTTPS連接打開---
GET /login/step2.asp HTTP/1.1
Host: example.com
Connection: Keep-Alive
Cookie: ASPSESSION...
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/7.5
WWW-Authenticate: NTLM
Content-Length: 1344
---和連接再次關閉---
你知道一種方法來解決這個問題嗎?
我覺得那不是那麼簡單。我不確定是否可以更改Java文件的發佈者的軟件包名稱。而且我知道android團隊修改了大量文件。你有一個envidence,這不會破壞什麼? – rekire
我認爲Android使用標準的DefaultHttpClient ..但是,我不能確定。再一次,除非你嘗試過,否則你永遠不會知道,對吧? –
當然,我正在閱讀'DefaultRequestDirector'類,在那裏我發現了連接關閉的原因。我會在使用Apache代碼之前嘗試解決這個問題。 – rekire