Java 关于使用“过帐”过帐数据的问题;NameValuePair“;

Java 关于使用“过帐”过帐数据的问题;NameValuePair“;,java,http-post,httpclient,Java,Http Post,Httpclient,我用java方法编写,负责发送POSTlikeajax public String getWebInfo() { DefaultHttpClient httpclient = null; String out = null; try { System.out.println("send started"); httpclient = new DefaultHttpClient(); Credentials cred =

我用java方法编写,负责发送
POST
like
ajax

public String getWebInfo() {

    DefaultHttpClient httpclient = null;
    String out = null;

    try {
        System.out.println("send started");
        httpclient = new DefaultHttpClient();

        Credentials cred = new UsernamePasswordCredentials("user", "password");


         httpclient.getCredentialsProvider().setCredentials(
                    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM),
                    cred);

         HttpPost httpost = new HttpPost("https://page/php/data.ajax.php");

        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("action", "1"));
        nvps.add(new BasicNameValuePair("name", "2"));

        UrlEncodedFormEntity entityU = new UrlEncodedFormEntity(nvps);
        entityU.setContentEncoding(HTTP.UTF_8);
        //entityU.setContentType("application/json");
        httpost.setEntity(entityU);



        System.out.println("send about to do post");
        HttpResponse response = httpclient.execute(httpost);
        System.out.println("send post done");
        HttpEntity entity = response.getEntity();

        if (entity != null) {
            System.out.println("response.getStatusLine: " + response.getStatusLine());
            InputStream is = entity.getContent();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ( (line = br.readLine()) != null) {
                System.out.println("Response: " +  line);
                out = line;
            }
            is.close();

        } else {
            System.out.println("Response: response is null");
        }

    } catch (Exception e) {
        e.getStackTrace();
    }

    if (httpclient != null) {
        httpclient.getConnectionManager().shutdown();
    }

    return out;     
}
服务器端

从我在
msqLogFile(“page/post”,Array('post'=>urldecode(内爆(“,”,$\u post)))上的日志

我只获取不带密钥的数据:

"2013-05-02 04:21:09","1,2"
它应该是json数据:

tail-f/etc/httpd/logs/ssl\u请求\u log

 82.80.25.130 TLSv1 AES128-SHA "POST /page/php/data.ajax.php HTTP/1.1" 484
 82.80.25.130 TLSv1 AES128-SHA "POST /page/php/data.ajax.php HTTP/1.1" 3
当我取消对entityU.setContentType(“应用程序/json”)的注释时,我没有得到任何数据

从javascript开始,一切正常:

var json = JSON.stringify({action: 1,name: 2});
        $.ajax({
            type: "POST",
            url: "/page/php/data.ajax.php",
            dataType:"json",
            data:{data:json},
            success:function(data){
我得到的回应是:

"2013-05-02 04:21:09","{"action":1,"name":2}"
public String getWebInfo() {

DefaultHttpClient httpclient = null;
String out = null;

try {
    System.out.println("send started");
    httpclient = new DefaultHttpClient();

    Credentials cred = new UsernamePasswordCredentials("user", "password");


     httpclient.getCredentialsProvider().setCredentials(
                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM),
                cred);

     HttpPost httpost = new HttpPost("https://page/php/data.ajax.php");

     JSONObject jsonObj = new JSONObject();
     jsonObj.put("action", 1);
     jsonObj.put("name", 2);


    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("data", jsonObj.toString()));


    UrlEncodedFormEntity entityU = new UrlEncodedFormEntity(nvps);
    entityU.setContentEncoding(HTTP.UTF_8);
    //entityU.setContentType("application/json");
    httpost.setEntity(entityU);



    System.out.println("send about to do post");
    HttpResponse response = httpclient.execute(httpost);
    System.out.println("send post done");
    HttpEntity entity = response.getEntity();

    if (entity != null) {
        System.out.println("response.getStatusLine: " + response.getStatusLine());
        InputStream is = entity.getContent();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line = null;
        while ( (line = br.readLine()) != null) {
            System.out.println("Response: " +  line);
            out = line;
        }
        is.close();

    } else {
        System.out.println("Response: response is null");
    }

} catch (Exception e) {
    e.getStackTrace();
}

if (httpclient != null) {
    httpclient.getConnectionManager().shutdown();
}

return out;     
}
我的问题在哪里


谢谢,

我找到了解决办法,但假设有人会找到更好的答案:

"2013-05-02 04:21:09","{"action":1,"name":2}"
public String getWebInfo() {

DefaultHttpClient httpclient = null;
String out = null;

try {
    System.out.println("send started");
    httpclient = new DefaultHttpClient();

    Credentials cred = new UsernamePasswordCredentials("user", "password");


     httpclient.getCredentialsProvider().setCredentials(
                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM),
                cred);

     HttpPost httpost = new HttpPost("https://page/php/data.ajax.php");

     JSONObject jsonObj = new JSONObject();
     jsonObj.put("action", 1);
     jsonObj.put("name", 2);


    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("data", jsonObj.toString()));


    UrlEncodedFormEntity entityU = new UrlEncodedFormEntity(nvps);
    entityU.setContentEncoding(HTTP.UTF_8);
    //entityU.setContentType("application/json");
    httpost.setEntity(entityU);



    System.out.println("send about to do post");
    HttpResponse response = httpclient.execute(httpost);
    System.out.println("send post done");
    HttpEntity entity = response.getEntity();

    if (entity != null) {
        System.out.println("response.getStatusLine: " + response.getStatusLine());
        InputStream is = entity.getContent();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line = null;
        while ( (line = br.readLine()) != null) {
            System.out.println("Response: " +  line);
            out = line;
        }
        is.close();

    } else {
        System.out.println("Response: response is null");
    }

} catch (Exception e) {
    e.getStackTrace();
}

if (httpclient != null) {
    httpclient.getConnectionManager().shutdown();
}

return out;     
}
公共字符串getWebInfo(){
DefaultHttpClient httpclient=null;
String out=null;
试一试{
System.out.println(“发送已启动”);
httpclient=新的DefaultHttpClient();
Credentials cred=新用户名PasswordCredentials(“用户”、“密码”);
httpclient.getCredentialsProvider().setCredentials(
新的AuthScope(AuthScope.ANY_主机、AuthScope.ANY_端口、AuthScope.ANY_域),
信用卡);
HttpPost HttpPost=新的HttpPost(“https://page/php/data.ajax.php");
JSONObject jsonObj=新的JSONObject();
jsonObj.put(“行动”,1);
jsonObj.put(“名称”,2);
List-nvps=newarraylist();
add(新的BasicNameValuePair(“data”,jsonObj.toString());
UrlEncodedFormEntity entityU=新的UrlEncodedFormEntity(nvps);
setContentEncoding(HTTP.UTF_8);
//setContentType(“应用程序/json”);
httpost.setEntity(entityU);
System.out.println(“发送即将发送的邮件”);
HttpResponse response=httpclient.execute(httpost);
System.out.println(“发送邮件完成”);
HttpEntity=response.getEntity();
如果(实体!=null){
System.out.println(“response.getStatusLine:+response.getStatusLine());
InputStream=entity.getContent();
InputStreamReader isr=新的InputStreamReader(is);
BufferedReader br=新的BufferedReader(isr);
字符串行=null;
而((line=br.readLine())!=null){
System.out.println(“响应:+行);
out=行;
}
is.close();
}否则{
System.out.println(“响应:响应为空”);
}
}捕获(例外e){
e、 getStackTrace();
}
if(httpclient!=null){
httpclient.getConnectionManager().shutdown();
}
返回;
}

很好,你找到了它。我读了这篇文章,看看你们是如何测试的,并提出了一个建议

如果您正在使用大量http,那么您将在dev中获得良好的结果,因为您能够卷曲所有表达式,以查看您的跨网络工作流是否正常。如果需要,您的单元测试可以包括Bash脚本,这些脚本只发送一大串http流量

在java中,您需要找到一种切换http日志的方法,以便您的普通记录器可以编写如下所示的头/线语句——请参阅accept ans--

您将清楚地看到服务器的所有标题和FRM,以及连接到/FRM服务器的线路上的所有主体信息,这些信息在您的正常记录器中以“方向”显示

弄清楚怎么做很难,但当你弄明白的时候,我觉得值得一读


您是否使用Wireshark来查看实际发生的情况?我怀疑您的nvp对象没有被正确序列化。我试图只发送json数据,但通过这种方式POST是空的