(Android)D / OkHttp:400 Bad Request

时间:2017-03-20 12:08:39

标签: android api rx-java

@Headers("Authorization: " + BuildConfig.CLIENT_ID + " " + BuildConfig.CLIENT_SECRET)
@GET("get/list")
Observable<List<Post>> getList();

在get文件夹中你可以找到这样的.htaccess:

RewriteEngine On
AuthName "Staff Only:3"
AuthType Basic
AuthUserFile .../api/get/.htpasswd
require valid-user

获取/列表返回json数组的帖子。那个PHP代码中没有400个代码。我也肯定在我的json回复中,它是正确的(由jsonschema2pojo.org确认) Header(代码块1)真的授权我。

和...

D/OkHttp: --> GET http://*********/api/get/list http/1.1
D/OkHttp: Authorization: r*******m *******6
D/OkHttp: --> END GET
...
D/OkHttp: <-- 400 Bad Request http://*********/api/get/list (18711ms)
D/OkHttp: Date: Sun, 19 Mar 2017 20:13:11 GMT
D/OkHttp: Content-Type: text/html
D/OkHttp: Content-Length: 177
D/OkHttp: Connection: close
D/OkHttp: Server: -nginx
D/OkHttp: CF-RAY: -
D/OkHttp: <html>
D/OkHttp: <head><title>400 Bad Request</title></head>
D/OkHttp: <body bgcolor="white">
D/OkHttp: <center><h1>400 Bad Request</h1></center>
D/OkHttp: <hr><center>cloudflare-nginx</center>
D/OkHttp: </body>
D/OkHttp: </html>
D/OkHttp: <-- END HTTP (177-byte body)

WTH?为什么?请告诉我这是什么问题?你可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的PHP文件返回Content-Type: text/html而不是Content-Type: application/json;charset=UTF-8,这就是您获得400的原因。在PHP文件上设置标题。

header("Content-Type: application/json;charset=utf-8");

来自PHP documentation

  

请记住,在发送任何实际输出之前必须调用header(),无论是普通HTML标记,文件中的空行还是PHP。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。