Java 无法使用改型HTTP发布数据,但可以使用命令行发布

Java 无法使用改型HTTP发布数据,但可以使用命令行发布,java,android,retrofit2,Java,Android,Retrofit2,无法使用改型HTTP发布数据,但可以使用命令行发布。我在拦截器中添加了必需的头,但仍然失败 对于Android应用程序,它返回代码500/内部错误。对于使用curl的命令行,它以200返回代码,所以在服务器端没有问题 Android代码:返回500/内部错误的响应代码 private void postData(String data) { Toast.makeText(settingFragmentView.getContext(),"Inside postDat

无法使用改型HTTP发布数据,但可以使用命令行发布。我在拦截器中添加了必需的头,但仍然失败

对于Android应用程序,它返回代码500/内部错误。对于使用curl的命令行,它以200返回代码,所以在服务器端没有问题

Android代码:返回500/内部错误的响应代码

  private void postData(String data) {
        Toast.makeText(settingFragmentView.getContext(),"Inside postData function",Toast.LENGTH_LONG).show();


        // on below line we are creating a retrofit
        // builder and passing our base url

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor( HeaderInterceptor())
                .build();


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://locserver2.lab.acs.altran.fr")
                .client(okHttpClient)
                // as we are sending data in json format so
                // we have to add Gson converter factory
                .addConverterFactory(GsonConverterFactory.create())
                // at last we are building our retrofit builder.
                .build();

        // below line is to create an instance for our retrofit api class.
        RetrofitAPI retrofitAPI = retrofit.create(RetrofitAPI.class);

        // passing data from our text fields to our modal class.
        DataModal modal = new DataModal(data);

        // calling a method to create a post and passing our modal class.
        Call<DataModal> call = retrofitAPI.createPost(modal);



        // on below line we are executing our method.
        call.enqueue(new Callback<DataModal>() {
            @Override
            public void onResponse(Call<DataModal> call, Response<DataModal> response) {

                
                // we are getting response from our body
                // and passing it to our modal class.
                DataModal responseFromAPI = response.body();

                // on below line we are getting our data from modal class and adding it to our string.
                String responseString = "Response Code : " + response.code();
                Toast.makeText(settingFragmentView.getContext(), "Data posted to HTTP server with response code : " + responseString , Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onFailure(Call<DataModal> call, Throwable t) {
                
                Toast.makeText(settingFragmentView.getContext(), "HTTP Post Failure...", Toast.LENGTH_SHORT).show();

            }
        });
    }

    private Interceptor HeaderInterceptor() {
        return new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                okhttp3.Request request = chain.request();
                            request = request.newBuilder()
                            .addHeader("Accept", "application/json")
                            .addHeader("Content-type","application/json")
                            .build();


                okhttp3.Response response = chain.proceed(request);
                Log.e("headers", request.toString());
               // Toast.makeText(settingFragmentView.getContext(),response.toString(),Toast.LENGTH_LONG).show();
                return response;
            }
        };
    }
private void postData(字符串数据){
Toast.makeText(setingFragmentView.getContext(),“内部postData函数”,Toast.LENGTH_LONG.show();
//在下面的一行中,我们正在创建一个改装
//生成器并传递我们的基本url
OkHttpClient OkHttpClient=新建OkHttpClient.Builder()
.addInterceptor(HeaderInterceptor())
.build();
改装改装=新改装.Builder()
.baseUrl(“https://locserver2.lab.acs.altran.fr")
.客户(okHttpClient)
//由于我们以json格式发送数据,所以
//我们必须增加Gson转换器工厂
.addConverterFactory(GsonConverterFactory.create())
//最后,我们正在建造我们的改装建筑商。
.build();
//下面一行是为我们的改型api类创建一个实例。
RefundationAPI RefundationAPI=Refundation.create(RefundationAPI.class);
//将数据从文本字段传递到模式类。
数据模式=新的数据模式(数据);
//调用一个方法来创建一个post并传递我们的模态类。
Call Call=reformationAPI.createPost(模态);
//在下面的行中,我们正在执行我们的方法。
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
//我们的身体正在做出反应
//并将其传递给我们的模态类。
DataModal responseFromAPI=response.body();
//在下面的行中,我们从模态类获取数据,并将其添加到字符串中。
String responseString=“响应代码:”+Response.Code();
Toast.makeText(settingFragmentView.getContext(),“发送到HTTP服务器的数据,响应代码:”+responseString,Toast.LENGTH\u SHORT.show();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(setingFragmentView.getContext(),“HTTP Post失败…”,Toast.LENGTH\u SHORT.show();
}
});
}
专用侦听器头侦听器(){
返回新的拦截器(){
@凌驾
公共okhttp3.响应截获(链)引发IOException{
okhttp3.Request=chain.Request();
request=request.newBuilder()
.addHeader(“接受”、“应用程序/json”)
.addHeader(“内容类型”、“应用程序/json”)
.build();
okhttp3.Response-Response=chain.procedue(请求);
Log.e(“headers”,request.toString());
//Toast.makeText(setingFragmentView.getContext(),response.toString(),Toast.LENGTH_LONG).show();
返回响应;
}
};
}
命令行:它返回的响应代码为200

curl -v -H 'Content-type: application/json' -H 'Accept: application/json' -d '{ "tagId": "0x0002", "tagData": { "batteryLevel": 89, "socialDistancingInfo":"0x0001;1.93;1618402644;yes" }, "contact": [ {"ID": "0x0001"}], "presence": { "value": "notpresent" } }' https://locserver2.lab.acs.altran.fr/locationEngine/default/tagValues -X POST --http1.1
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 81.255.173.66...
* TCP_NODELAY set
* Connected to locserver2.lab.acs.altran.fr (81.255.173.66) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=locserver.lab.acs.altran.fr
*  start date: Apr 30 14:58:25 2021 GMT
*  expire date: Jul 29 14:58:25 2021 GMT
*  subjectAltName: host "locserver2.lab.acs.altran.fr" matched cert's "locserver2.lab.acs.altran.fr"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
> POST /locationEngine/default/tagValues HTTP/1.1
> Host: locserver2.lab.acs.altran.fr
> User-Agent: curl/7.58.0
> Content-type: application/json
> Accept: application/json
> Content-Length: 180
> 
* upload completely sent off: 180 out of 180 bytes
**< HTTP/1.1 200 OK**
< Date: Fri, 28 May 2021 12:14:30 GMT
< Server: nginx/1.14.0 (Ubuntu)
< Content-Type: text/html; charset=utf-8
< X-Powered-By: web2py
< Expires: Fri, 28 May 2021 12:14:30 GMT
< Pragma: no-cache
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Set-Cookie: session_id_locationengine=10.1.90.1-6e6fee2f-8c56-4d6f-b685-0aa6a8283011; httponly; Path=/; SameSite=Lax
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< 
* Connection #0 to host locserver2.lab.acs.altran.fr left intact
curl-v-H'内容类型:application/json'-H'Accept:application/json'-d'{“tagId”:“0x0002”,“tagData”:{“battylevel”:89,“socialdistancingfo”:“0x0001;1.93;1618402644;yes”},“contact”:[{“ID”:“0x0001”},“presence”:{“value”:“notpresent”}' https://locserver2.lab.acs.altran.fr/locationEngine/default/tagValues -X POST——http1.1
注意:不必要地使用-X或--request,POST已经推断出来。
*正在尝试81.255.173.66。。。
*TCP_节点集
*已连接到locserver2.lab.acs.altran.fr(81.255.173.66)端口443(#0)
*ALPN,提供http/1.1
*已成功设置证书验证位置:
*CAfile:/etc/ssl/certs/ca-certificates.crt
CApath:/etc/ssl/certs
*TLSv1.3(输出),TLS握手,客户端问候(1):
*TLSv1.3(IN)、TLS握手、服务器hello(2):
*TLSv1.2(IN),TLS握手,证书(11):
*TLSv1.2(IN)、TLS握手、服务器密钥交换(12):
*TLSv1.2(IN),TLS握手,服务器完成(14):
*TLSv1.2(输出)、TLS握手、客户端密钥交换(16):
*TLSv1.2(OUT),TLS更改密码,客户端hello(1):
*TLSv1.2(输出),TLS握手,完成(20):
*TLSv1.2(IN),TLS握手,完成(20):
*使用TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384的SSL连接
*ALPN,接受使用http/1.1的服务器
*服务器证书:
*主题:CN=locserver.lab.acs.altran.fr
*开始日期:4月30日14:58:25 2021 GMT
*过期日期:7月29日14:58:25格林威治标准时间2021
*subjectAltName:主机“locserver2.lab.acs.altran.fr”与证书“locserver2.lab.acs.altran.fr”匹配
*发行人:C=美国;O=让我们加密;CN=R3
*SSL证书验证正常。
>POST/locationEngine/default/tagValues HTTP/1.1
>主机:locserver2.lab.acs.altran.fr
>用户代理:curl/7.58.0
>内容类型:application/json
>接受:application/json
>内容长度:180
> 
*上传已完全发送:180字节中的180个
**
我正在发送字符串\“tagId\:\“x01\”,\“tagData\:{“batteryLevel\”:89},\“contact\”:{“ID\”:\“x02\”},\“presence\”:“value\:“present\”+“}”