使用Reform在Android中重新创建flask api调用



我在服务器上有一个flask应用程序和api,可以使用从终端发送的以下url

curl -i -H "Content-type: application/json" -X GET http://myapp.com/890/14000/10000/007 -d '{"id":"3240f056c8f5fb"}'

我正在尝试在安卓系统上使用改装来重新创建这个。我使用的是1.7版本,因为它与一些未在此处显示的遗留代码配合使用。以下是应用程序类的相关部分

DavesApi buildDavesApi() {
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create();
        return new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL) // change this to FULL to see full JSON response
                .setEndpoint(DAVESENDPOINT)
                .setConverter(new GsonConverter(gson))
                .setRequestInterceptor(new RequestInterceptor() {
                    @Override
                    public void intercept(RequestFacade request) {
                        request.addHeader("Content-type", "application/json");
                    }
                })
                .build()
                .create(DavesApi.class);
    }

和api类

public interface DavesApi {
    @Headers("{"id":"3240f056c8f5fb"}")
    @GET("/{importantnumber}/14000/10000/007")
    void getThumbnail(@Path("importantnumber") Integer id, Callback<DavesActivity> activity);
}

在这一点上,我只得到了一般性的错误,比如

 D/Retrofit: ---> HTTP GET http://myurl.com/420059/14000/10000/007
 D/Retrofit: '{"id": "3240f056c8f5fb"}'
 D/Retrofit: Content-Type: application/json
 D/Retrofit: ---> END HTTP (no body)
 D/Retrofit: <--- HTTP 400 http://myurl.com/420059/14000/10000/007 (2653ms)
 D/Retrofit: : HTTP/1.1 400 BAD REQUEST
 D/Retrofit: Connection: keep-alive
 D/Retrofit: Content-Length: 95
 D/Retrofit: Content-Type: application/json
 D/Retrofit: Date: Sun, 29 Nov 2015 23:08:45 GMT
 D/Retrofit: Server: ngx_openresty/1.4.3.6
 D/Retrofit: X-Android-Received-Millis: 1448838524561
 D/Retrofit: X-Android-Response-Source: NETWORK 400
 D/Retrofit: X-Android-Sent-Millis: 1448838523377
 D/Retrofit: {"description": "The browser (or proxy) sent a request that this server could not understand."}
 D/Retrofit: <--- END HTTP (95-byte body)
 E/activity_fragment: retrofit.RetrofitError: 400 BAD REQUEST

这是我的第一个flask应用程序,我不完全确定如何调试,所以这里的任何帮助也很感激。

我也无法访问服务器日志


更新

为了找出问题所在,我在服务器上编辑了代码。如果我只是在api中返回一个字符串,那么改装就会收到一个响应。如果我尝试返回改装后在标头中发送的任何数据,我会得到一个空响应,而curl请求会得到适当的响应。我已经在response.dataresponse.json中尝试过这一点,以确保这不仅仅是一个json编码问题。然而,在执行此操作时,我需要删除"Content-type"、"application/json"标头,以避免之前发布的400。

返回response.data 时的新日志

 D/Retrofit: ---> HTTP GET http://myurl.com/420059/14000/10000/007
 D/Retrofit: test: header
 D/Retrofit: ---> END HTTP (no body)
 D/Retrofit: <--- HTTP 200 http://myurl.com/420059/14000/10000/007 (316ms)
 D/Retrofit: : HTTP/1.1 200 OK
 D/Retrofit: Connection: keep-alive
 D/Retrofit: Content-Length: 0
 D/Retrofit: Content-Type: text/html; charset=utf-8
 D/Retrofit: Date: Mon, 30 Nov 2015 20:34:54 GMT
 D/Retrofit: Server: ngx_openresty/1.4.3.6
 D/Retrofit: X-Android-Received-Millis: 1448915692589
 D/Retrofit: X-Android-Response-Source: NETWORK 200
 D/Retrofit: X-Android-Sent-Millis: 1448915692449
 D/Retrofit: X-Clacks-Overhead: GNU Terry Pratchett
 D/Retrofit: <--- END HTTP (0-byte body) // empty body :(

似乎是增加了一笔赏金才迫使我解决了这个问题:(

这只是我对基本旋度的误解。显然,curl请求将数据放在了主体中,而我将其作为另一个头。只需更改服务器上的代码以查找request.header,或将id更改为改装请求的@data部分即可。

真不敢相信我在这个盲目明显的错误上浪费了这么多时间和金钱。

最新更新