【问题标题】:How can I view the string sent from httppost?如何查看从 httppost 发送的字符串?
【发布时间】:2012-06-22 04:08:44
【问题描述】:

下面是一段试图发布到本地服务器上的 PHP 脚本的 sn-p 代码。我正在将数据传输回服务器的 MySQL 表,由于数据量非常小,我想我会使用 HttpClient 将数据嵌入到 URL 参数中。

但是,即使我从服务器得到的响应是正常的(HTTP 代码 = 200),很明显服务器端 PHP 脚本没有获取正确格式的数据(对 MySQL 表没有影响) .但是,当我像这样在浏览器中手动输入 URL+args 时:

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端的sn-p:

// 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 />";
?>

相关部分的日志:

06-22 13:33:11.341: I/HTTP Post(27788): 执行 Post 发送 jobnum=189193&pnum=3&entime=9:00&extime=9:05 06-22 13:33:11.581: I/HTTP Post(27788):来自服务器的响应 = OK 代码 = 200

权限很好(在 INTERNET 的 Manifest 文件中,对于 PHP 文件,Apache2 已打开并正在运行,API=8,使用带有 Android 模拟器的 Eclipse)。 convertSimple() 是一个 2 行,它返回一个 int 原语的等效字符串。

提前感谢您查看此内容!

【问题讨论】:

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

标签: android string url http-post httpclient


【解决方案1】:

使用这个方法

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();
}   

并像这样调用以查看您的 post 方法中包含哪些实体

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

【讨论】:

    【解决方案2】:

    在浏览器中输入变量时看到变量的原因是 GET 和 POST 之间的区别。当您使用浏览器时,您是以 GET 格式发送变量。

    在你的 php 代码中使用:

    $_POST['varname'];
    

    或者你可以使用 request 来获取 POST 和 GET vars:

    $_REQUEST['varname'];
    

    【讨论】:

    • 谢谢,那是我的错误。一旦我将 php 脚本更改为发布格式,它就可以立即工作。非常感谢!
    【解决方案3】:

    我会使用fiddler 来查看请求

    【讨论】:

      【解决方案4】:

      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());
             }
      

      result 将在我为测试目的打印在日志中的字符串中给你响应

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2014-02-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多