2013-02-19 76 views
3

我在使用我的服務器進行身份驗證時遇到了一些問題。Android:在HTTP中使用Cookie發佈請求

當我手動嘗試通過像Postman這樣的Google插件設置Cookie時工作,但在通過Android設備或模擬器完成時無法工作。

這裏是我的那部分代碼:

String url = "www.thisismyendpoint.com"; 
String ci_session = "ci_session=token"; 

CookieStore cookieStore = new BasicCookieStore(); 
BasicClientCookie stdCookie = new BasicClientCookie("Cookie",ci_session); 
cookieStore.addCookie(stdCookie); 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpContext localContext = new BasicHttpContext(); 

localContext.setAttribute(ClientContext.COOKIE_STORE, 
     cookieStore); 
HttpPost httppost = new HttpPost(url); 

HttpResponse response = httpClient.execute(httppost, localContext); 

這是我在logcat的響應:

02-19 16:43:47.149: D/response(27539): response: <div style="border:1px solid    #990000;padding-left:20px;margin:0 0 10px 0;"> 
02-19 16:43:47.149: D/response(27539): <h4>A PHP Error was encountered</h4> 
02-19 16:43:47.149: D/response(27539): <p>Severity: Notice</p> 
02-19 16:43:47.149: D/response(27539): <p>Message: Undefined index: ci_session</p> 
02-19 16:43:47.149: D/response(27539): <p>Filename: controllers/test.php</p> 
02-19 16:43:47.149: D/response(27539): <p>Line Number: 28</p> 
02-19 16:43:47.149: D/response(27539): </div> 

我做錯什麼了嗎?我試圖將ci_session設置爲標題,但同樣它沒有工作。請指教。謝謝!

+0

它看起來像PHP腳本有問題。該消息表明「ci_session」不存在於數組中,用於捕獲從Java – Lobo 2013-02-19 09:01:58

+0

發送的「ci_session」參數,但它在我在瀏覽器上模擬相同的請求時起作用,所以我想知道如果我沒有做到某件事在Android – kenwjj 2013-02-19 09:04:13

回答

2

您確定cookie設置正確嗎?
就我而言,我使用HTTPGET和手動設置Cookie:

HttpGet httpGet = new HttpGet(url); 
httpGet.addHeader("Cookie", cookie); 

的cookie被存儲在sharedPreferences。應該像我認爲的那樣爲HttpPost工作。

+0

它對HttpPost的工作方式相同。 – 2013-02-19 10:09:30

+0

是的,我得到它的工作。不能相信它。最簡單的解決方案無時無刻不在...... – kenwjj 2013-02-19 11:04:58

+0

您能否請您發佈您的整個解決方案 – Dimitri 2013-11-14 07:21:47

2

我遇到了類似的問題。您不應爲每個新請求創建新的DefaultHttpClient。相反,使用一個靜態單例,並將其用於所有Http Request需求。