2012-05-01 60 views
0

所以IAM試圖從該服務器中獲得成功的日誌:www.liuserver.com和IM使用兩類LoginLayout.java和CustomHttpclient.java,現在我已經監測與服務器瀏覽器通信使用Httpwatch來跟蹤服務器產生的回覆的種類和帖子(它產生的url包含用戶提供的用戶名和密碼,除了x和y自動生成的整數,在這個例子中是31和1,其他時間是hey只是零)後的網頁看起來像這樣:的Android登錄應用網站

POST /login.php HTTP/1.1 
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap,  application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* 
Referer: https://www.liuserver.com/login.php 
Accept-Language: en-US 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR  3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C) 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Host: www.liuserver.com 
Content-Length: 38 
Connection: Keep-Alive 
Cache-Control: no-cache 
Cookie: PHPSESSID=e3q4d78jkci3shhn8fq1tlf7i5 

USER=20730312&PASS=Password44&x=32&y=1 

現在我已經成功地生成具有參數的URL,我張貼到服務器,但當然,它給了我是負面的e回覆,現在我已經被告知,並且在httpwatch插件的cookie選項卡中顯而易見,我需要將phpsessionid作爲cookie發送給我,我的問題如何能夠做到這一點,以及我應該在哪個類中放置用這些參數發送cookie的代碼,以及在成功驗證用戶名和密碼後,如何跟蹤服務器的回覆類型。 答覆流的樣子:

HTTP/1.1 302 Found 
Server: nginx/1.0.14 
Date: Tue, 01 May 2012 15:57:06 GMT 
Content-Type: text/html 
Connection: keep-alive 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Location: student/ 
X-Powered-By: PleskLin 
Content-Length: 0 

的完整URL登錄頁面:https://www.liuserver.com/login.php

更新:

好吧,我已經成功地從服務器獲取的phpsessionid餅乾,我可以查看它的價值,現在我必須提交我的登錄參數使用

response = CustomHttpClient.executeHttpPost("https://www.liuserver.com/login.php", postParameters); 

但我應該在哪裏放置cookie在此方法中包含phpsession id executehttpPost我可以更改方法的參數並將cookie傳遞給那裏?

回答

1

要保存的cookies,您需要沿着線的東西:

CookieStore cookieStore = new BasicCookieStore(); 
DefaultHttpClient httpclient = new DefaultHttpClient(); 

HttpContext ctx = new BasicHttpContext(); 
ctx.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 
HttpGet get = new HttpGet("your URL here"); 

HttpResponse response = httpclient.execute(get,ctx); 

如果你想保持請求之間的cookie,你必須重用cookieStorectx爲每個請求。

此外,您還可以讀取你的cookieStore,看看裏面有什麼:

List<Cookie> cookies = cookieStore.getCookies(); 
if(!cookies.isEmpty()){ 
    for (Cookie cookie : cookies){ 
     String cookieString = cookie.getName() + " : " + cookie.getValue(); 
     Log.info(TAG, cookieString); 
    } 
} 
+0

非常感謝您的回覆,我有一個相關的問題在這裏說,我所做的HTTPGET服務器如何可以驗證應用程序接收的餅乾嗎?換句話說,我怎樣才能讀取從服務器到應用程序的回覆? – Jawad

+0

添加樣本展示瞭如何讀取cookie內容 – lenik

+0

感謝@lenik您的回覆,這是真正有用的,現在我存儲的cookie,可以讀取它使用cookie管理器的內容,但我仍然不知道我應該如何傳遞cookie到服務器以及與我的問題中列出的代碼相同的參數,它應該只是一個字符串或urlencoded值對實體嗎? – Jawad

0

您的cookie是因爲如果你想用玩的HTTP應答(就像在你的POST)是頭部的一部分通過頭直接。

但是就像其他海報說的那樣,如何處理cookies(正確)在他發佈的示例中,並且最終將幫助您正確使用API​​,即使學習它如何可能會很痛苦作品首次圍繞:-)