2012-06-22 18 views
2

下面是試圖發佈到本地服務器上的PHP腳本的代碼片段。我將數據傳回服務器的MySQL表,由於數據量非常小,我想我會使用HttpClient將數據嵌入到URL參數中。然而,即使我從服務器收到的響應是OK(HTTP代碼= 200),很明顯服務器端PHP腳本沒有正確格式化數據(對MySQL表沒有任何影響)。然而,當我手動在瀏覽器中輸入網址+ ARGS像這樣:如何查看從httppost發送的字符串?

http://10.0.0.13/jobs_returndata_test.php?jobnum=189193&pnum=3&entime=13:00&extime=14:00 

例如,一切工作正常(的PHP腳本正確地寫入到MySQL表)。

我的問題:有沒有一種方法可以實際查看HttpClient發送的內容? (即,HttpPost對象的整個.toString內容?)。下面是Android的側片段:

// Create a new HttpClient and Post Header, send data as args to PHP file 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://10.0.0.13/jobs_returndata.php"); 
try { 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("jobnum",convertSimple(jobNum))); 
    nameValuePairs.add(new BasicNameValuePair("pnum",convertSimple(rowNum))); 
    nameValuePairs.add(new BasicNameValuePair("entime",enteredInTime)); 
    nameValuePairs.add(new BasicNameValuePair("extime",enteredOutTime)); 

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    Log.i("HTTP Post", "Execute Post sending jobnum="+ convertSimple(jobNum) +  
    "&pnum="+ convertSimple(rowNum) + "&entime=" + enteredInTime 
        + "&extime=" + enteredOutTime); 
    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 
    Log.i("HTTP Post", "Response from server = " + response.getStatusLine().getReasonPhrase() + " Code = " + convertSimple(response.getStatusLine().getStatusCode())); 

     } catch (ClientProtocolException e) { 
      Log.e("HTTP Post", "Protocol error = " + e.toString()); 
     } catch (IOException e) { 
      Log.e("HTTP Post", "IO error = " + e.toString()); 
     } 

我的服務器端的PHP文件是:

?php 
$jobnum=$_GET['jobnum']; 
//echo "jobnum = $jobnum <br />"; 
$pnum=$_GET['pnum']; 
//echo "pnum = $pnum <br />"; 

$entime=$_GET['entime']; 
//echo "entime = $entime <br />"; 

$extime=$_GET['extime']; 
//echo "extime = $extime <br />"; 


$dbh=mysql_connect ("localhost", "Steve", "pluggin"); 
mysql_select_db ("DriverJobs"); 

$result = mysql_query("UPDATE jobs SET EntryTime = '$entime' WHERE JobNumber = '$jobnum' AND PointNum = '$pnum' "); 
$result = mysql_query("UPDATE jobs SET ExitTime = '$extime' WHERE JobNumber = '$jobnum' AND PointNum = '$pnum' ") ; 

//echo "done <br />"; 
?> 

的相關章節中的logcat:

06-22 13:33: 11.341:I/HTTP Post(27788):執行發送後 jobnum = 189193 & pnum = 3 & entime = 9:00 & extime = 9:05 06-22 13:33:11.581: I/HTTP投遞(27788):從服務器= OK代碼= 200

權限響應良好(在INTERNET清單文件,併爲PHP文件,的Apache2是上並運行時,API = 8,使用Eclipse和Android模擬器)。 convertSimple()是一個2班輪,返回int原語的String等價物。

在此感謝提前看!

+0

使用嗅探器(Wireshark)是我首先想到的。 – nhahtdh

回答

3

您在瀏覽器中輸入變量時看到變量的原因是GET和POST之間的區別。當您使用瀏覽器時,您將以GET格式發送變量。

在PHP代碼中使用:

$_POST['varname']; 

或者您可以使用請求來獲取POST和GET瓦爾:

$_REQUEST['varname']; 
+0

謝謝你,那是我的錯。一旦我將php腳本更改爲發佈格式,馬上就可以使用。非常感激! – stuckInOldLodiAgain

-1

後HttpResponse添加代碼如下所示

 InputStream is; 

      try{ 
      if(response == null){ 

       }else{ 
        HttpEntity entity = response.getEntity(); 
        is = entity.getContent(); 
        } 

       } catch (Exception e) { 
       Log.e("log_tag", "Error in http connection " + e.toString()); 
       } 

     // convert response to string 
    try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1")); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
      Log.e("res",result); 
     } catch (Exception e) { 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

其中結果將要給你的字符串迴應,我在日誌已打印的測試目的

6

使用此方法

private String convertStreamToString(InputStream is) throws Exception { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line); 
    } 
    is.close(); 
    return sb.toString(); 
} 

而且這樣調用,看看有什麼實體都包含在您的文章方法

try { 
    HttpPost postMethod = new HttpPost("your url"); 
    Log.i(TAG,"HTTP Entiry : " + convertStreamToString(postMethod.getEntity().getContent())); 
}catch (Exception e){ 
    e.printStackTrace(); 
}