当前位置: 首页 > 知识库问答 >
问题:

谷歌截击忽略POST参数

云承天
2023-03-14

我目前正试图通过Google Volley发送一个简单的POST请求到我的服务器。因此,我写了以下几行代码:

Map<String, String> params = new HashMap<String, String>();
params.put("regId", "skdjasjdaljdlksajskl");
JSONObject object = new JSONObject(params);
JsonObjectRequest request = new JsonObjectRequest(Method.POST,
                "address_of_my_server/method", object,
                successListener, errorListener);
queue.add(request);

但是我得到一个返回的错误500,它表示缺少一个参数(regId)。我尝试了相同的GET请求,但得到了相同的结果。

只有当我使用带有格式化URL的StringRequest时,如address_of_my_server/方法?"服务器以200回复。

当我使用StringRequest时,我得到了完全相同的结果,如:

StringRequest request = new StringRequest(Method.POST,
                "myurl", successListener,
                errorListener){
            @Override
            protected Map<String, String> getParams()
                    throws AuthFailureError {
               Map<String, String> params = new HashMap<String, String>();
               params.put("regId", "skdjasjdaljdlksajskl");
               return params;
            }
        };

为什么截击忽略了我的参数?

共有3个答案

夏昊
2023-03-14

Rajesh Batth提到的问题就是一个很好的例子

Java代码:

    JSONObject obj = new JSONObject();
    try {
        obj.put("id", "1");
        obj.put("name", "myname");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(
            Request.Method.POST, url, obj, listener, errorlistener);

    RequestQueue queue = Volley.newRequestQueue(context);
    queue.add(jsObjRequest);

PHP代码:

    $body = file_get_contents('php://input');
    $postvars = json_decode($body, true);
    $id = $postvars["id"];
    $name = $postvars["name"];

注:

如果不发送其他GET-VAR,则PHP变量$\u POST$\u REQUEST$\u GET为空。

锺离自明
2023-03-14

使用此帮助器类:

import java.io.UnsupportedEncodingException;
import java.util.Map;    
import org.json.JSONException;
import org.json.JSONObject;    
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public class CustomRequest extends Request<JSONObject> {

private Listener<JSONObject> listener;
private Map<String, String> params;

public CustomRequest(String url, Map<String, String> params,
        Listener<JSONObject> reponseListener, ErrorListener errorListener) {
    super(Method.GET, url, errorListener);
    this.listener = reponseListener;
    this.params = params;
}

public CustomRequest(int method, String url, Map<String, String> params,
        Listener<JSONObject> reponseListener, ErrorListener errorListener) {
    super(method, url, errorListener);
    this.listener = reponseListener;
    this.params = params;
}

protected Map<String, String> getParams()
        throws com.android.volley.AuthFailureError {
    return params;
};

@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
    try {
        String jsonString = new String(response.data,
                HttpHeaderParser.parseCharset(response.headers));
        return Response.success(new JSONObject(jsonString),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JSONException je) {
        return Response.error(new ParseError(je));
    }
}

@Override
protected void deliverResponse(JSONObject response) {
    // TODO Auto-generated method stub
    listener.onResponse(response);
    }
}
符鸿光
2023-03-14

我上周也有同样的问题,但现在已经解决了。您的服务器接受内容类型作为表单数据,当发送volley的JsonObjectRequest时,请求的内容类型将是application/json,因此整个参数将作为一个json主体发送,而不是像Stringrequest中那样作为键值对发送。更改服务器代码以从http请求体获取请求参数,而不是从键获取请求参数(如php中的$_request['name'])。

 类似资料:
  • 我看了关于截击的Google IO 2013课程,我正在考虑改用截击。Volley是否支持向请求添加POST/GET参数?如果是,我怎么做?

  • 问题内容: 有人能想到一种忽略Java双击附带的单击的好方法吗? 我希望每种行为都有不同的行为,例如: 单击可在点击点上绘制十字准线 双击选择屏幕上的对象,但应该 不是 搽点击点十字线 …有人能想到一种方法吗?某种计时器设置可能是?一个想法赞赏:-) <免责声明> …而且是的,我知道我正在犯一个最令人发指的可用性/ UI伪装。 问题答案: 实际上,您需要在MouseAdapter的重写mouseC

  • 我正在尝试制作一款可以通过语音识别停止的闹钟Android应用程序。为此,我正在使用Google语音识别API(这段代码可以连续进行语音识别)。 它工作得很好,直到我同时演奏音乐。在这种情况下,语音识别的效率会大大降低。 这个问题是合乎逻辑的,因为音乐会增加一些噪音,使识别变得更加困难。但是由于播放的音乐是已知的,我想知道是否有可能告诉谷歌尝试忽略这些额外的噪音。我知道信号处理中存在一些滤波器来做

  • 是否可以在Python中使用chromedriver和selenium对元素进行截图。我知道chrome开发工具允许我们对特定元素进行截图。即使是JavaScript方法,我也可以使用命令获取数据URI。

  • 我使用截击来实现简单的REST请求,并在其中传递一些post参数。但它总是给出响应。 我已尝试按照自定义要求进行操作。 我确实尝试重写并在其中传递参数。但它并没有传递参数并抛出错误400。我在这里和这里尝试了许多建议,但都不管用。截击中有虫子吗? 请导游。

  • 几个月前,为存储桶激活了云CDN。我们的存储数据通过后端定期更改。因此,为了使缓存版本无效,我们在提供给客户机的url中添加了一个带有的查询参数。 当时这很管用。 在过去几个月(可能是几周)的某个时候,Google似乎改变了这种情况,现在忽略了从存储桶缓存的查询字符串。 null 对于后端桶,缓存键由URI组成,不包含query>字符串。因此https://example.com/images/c