Java 具有非密钥对的Android post请求
下面是我目前的工作代码,用我的家庭自动化系统打开一盏灯。我正在升级到一个新系统,它需要一个修改后的post命令。目前我认为这会发送密钥对“lightswitch1=ON”。我需要它只发送“上”,但我不知道如何做到这一点。下面是有效的CURL命令Java 具有非密钥对的Android post请求,java,android,http,curl,post,Java,Android,Http,Curl,Post,下面是我目前的工作代码,用我的家庭自动化系统打开一盏灯。我正在升级到一个新系统,它需要一个修改后的post命令。目前我认为这会发送密钥对“lightswitch1=ON”。我需要它只发送“上”,但我不知道如何做到这一点。下面是有效的CURL命令 public void turnonlight() { String url = "http://example.com:8090/CMD"; StringRequest MyStringRequest = new StringR
public void turnonlight() {
String url = "http://example.com:8090/CMD";
StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Toast.makeText(MjpegActivity.this,response,Toast.LENGTH_LONG).show();
//This code is executed if the server responds, whether or not the response contains data.
//The String 'response' contains the server's response.
}
},
new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
@Override
public void onErrorResponse(VolleyError error) {
//Toast.makeText(MjpegActivity.this,error.toString(),Toast.LENGTH_LONG).show();
//This code is executed if there is an error.
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> MyData = new HashMap<String, String>();
MyData.put(lightswitch1 "ON"); //Add the data you'd like to send to the server.
return MyData;
}
};
RequestQueue MyRequestQueue = Volley.newRequestQueue(this);
MyRequestQueue.add(MyStringRequest);
}
public void turnonlight(){
字符串url=”http://example.com:8090/CMD";
StringRequest MyStringRequest=新建StringRequest(Request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//Toast.makeText(MjpegActivity.this,response,Toast.LENGTH_LONG.show();
//如果服务器响应,则执行此代码,无论响应是否包含数据。
//字符串“response”包含服务器的响应。
}
},
new Response.ErrorListener(){//创建一个错误监听器以适当地处理错误。
@凌驾
公共无效onErrorResponse(截击错误){
//Toast.makeText(MjpegActivity.this,error.toString(),Toast.LENGTH_LONG.show();
//如果出现错误,将执行此代码。
}
}){
@凌驾
受保护的映射getParams(){
Map MyData=newhashmap();
MyData.put(lightswitch1“ON”);//添加要发送到服务器的数据。
返回MyData;
}
};
RequestQueue MyRequestQueue=Volley.newRequestQueue(this);
添加(MyStringRequest);
}
curl-X POST--header“Content-Type:text/plain”--header“Accept:application/json”-d“ON”“”以下内容应与
Volley一起使用:
String url = "http://example.com:8090/CMD";
StringRequest myStringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "application/json");
return headers;
}
@Override
public String getBodyContentType() {
return "text/plain";
}
@Override
public byte[] getBody() throws AuthFailureError {
String httpPostBody = "ON";
return httpPostBody.getBytes();
}
};
RequestQueue MyRequestQueue = Volley.newRequestQueue(this);
myStringRequest.setShouldCache(false);
MyRequestQueue.add(myStringRequest);
stringurl=”http://example.com:8090/CMD";
StringRequest myStringRequest=新建StringRequest(Request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
headers.put(“接受”、“应用程序/json”);
返回标题;
}
@凌驾
公共字符串getBodyContentType(){
返回“文本/纯文本”;
}
@凌驾
公共字节[]getBody()抛出AuthFailureError{
字符串httpPostBody=“ON”;
返回httpPostBody.getBytes();
}
};
RequestQueue MyRequestQueue=Volley.newRequestQueue(this);
myStringRequest.setShouldCache(false);
添加(myStringRequest);
正文被getBody()
覆盖,指定的标题使用getHeaders()
以下内容应使用Volley
:
String url = "http://example.com:8090/CMD";
StringRequest myStringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "application/json");
return headers;
}
@Override
public String getBodyContentType() {
return "text/plain";
}
@Override
public byte[] getBody() throws AuthFailureError {
String httpPostBody = "ON";
return httpPostBody.getBytes();
}
};
RequestQueue MyRequestQueue = Volley.newRequestQueue(this);
myStringRequest.setShouldCache(false);
MyRequestQueue.add(myStringRequest);
stringurl=”http://example.com:8090/CMD";
StringRequest myStringRequest=新建StringRequest(Request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
headers.put(“接受”、“应用程序/json”);
返回标题;
}
@凌驾
公共字符串getBodyContentType(){
返回“文本/纯文本”;
}
@凌驾
公共字节[]getBody()抛出AuthFailureError{
字符串httpPostBody=“ON”;
返回httpPostBody.getBytes();
}
};
RequestQueue MyRequestQueue=Volley.newRequestQueue(this);
myStringRequest.setShouldCache(false);
添加(myStringRequest);
正文被getBody()
覆盖,并且指定的标题带有getHeaders()
我在尝试将其与代码一起发送时遇到“BasicNetwork.performRequest:意外响应代码400”错误。我使用wire shark并嗅出一个工作请求和一个非工作请求。右边的有效,左边的无效。我可以更改什么使左侧的与右侧的相同?我认为这是因为内容类型错误。我在尝试将其与代码一起发送时遇到“BasicNetwork.performRequest:意外响应代码400”错误。我使用wire shark并嗅出一个工作请求和一个非工作请求。右边的有效,左边的无效。我可以改变什么使左边的像右边的一样?我想这是因为内容类型错误。