问题描述
我正在使用改造+ Okhttp POST请求,我快到了以下错误:
4月2日至五日:45:13.981 15972-16249 / com.myapp.android D /改造:---> HTTP POST http://10.0.0.4:3000/api/v1/users/1/posts
4月2日至5日:45:13.981 15972-16249 / com.myapp.android D /改造:接受:应用/ JSON
4月2日至5日:45:13.981 15972-16249 / com.myapp.android D /改造:内容类型:应用程序/ JSON的;字符集= UTF-8
4月2日至5日:45:13.981 15972-16249 / com.myapp.android D /改造:内容长度:150
4月2日至5日:45:13.981 15972-16249 / com.myapp.android D /改造: {\"description\":\"test\",\"image_url\":\"https://s3.amazonaws.com/bucket/xxx-4800-b0e0-fc206f95f158.jpeg\",\"title\":\"test\",\"price\":0.0,\"user_id\":0}
4月2日至5日:45:13.981 15972-16249 / com.myapp.android D /改造:---> END HTTP(150字节体)
4月2日至5日:45:14.001 15972-15972 / com.myapp.android W / EGL_genymotion:eglSurfaceAttrib没有实现
4月2日至5日:45:14.017 15972-16249 / com.myapp.android D /改造:---- ERROR http://10.0.0.4:3000/api/v1/users/1/posts
4月2日至5日:45:14.017 15972-16249 / com.myapp.android D /改造:java.net.ProtocolException:意外状态行:HTTP / 1.1 422Unprocessable实体
在com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:73)
在com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:187)
在com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
在com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:791)
在com.squareup.okhttp.internal.http.HttpEngine.access $ 200(HttpEngine.java:90)
在com.squareup.okhttp.internal.http.HttpEngine $ NetworkInterceptorChain.proceed(HttpEngine.java:784)
在com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:645)
在com.squareup.okhttp.Call.getResponse(Call.java:263)
在com.squareup.okhttp.Call $ ApplicationInterceptorChain.proceed(Call.java:219)
在com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:192)
在com.squareup.okhttp.Call.execute(Call.java:79)
在retrofit.client.OkClient.execute(OkClient.java:53)
在retrofit.RestAdapter $ RestHandler.invokeRequest(RestAdapter.java:326)
在retrofit.RestAdapter $ RestHandler.access $ 100(RestAdapter.java:220)
在retrofit.RestAdapter $ RestHandler $ 1.invoke(RestAdapter.java:265)
在retrofit.RxSupport $ 2.run(RxSupport.java:55)
在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:422)
在java.util.concurrent.FutureTask.run(FutureTask.java:237)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:587)
在retrofit.Platform $的Android $ 2 $ 1.run(Platform.java:142)
在java.lang.Thread.run(Thread.java:841)
4月2日至5日:45:14.017 15972-16249 / com.myapp.android D /改造:---- END错误
使用以下库
编译com.squareup.retrofit:改造:1.9.0
编译com.squareup.okhttp:okhttp-的URLConnection:2.2.0
编译com.squareup.okhttp:okhttp:2.2.0
我期待类似以下回来(故意测试422错误):
{
头衔:[
过短(最短为6个字符)
]
}
通过邮差(发送时,我得到预期的结果<一个href=\"https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en\" rel=\"nofollow\">https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en)
编辑:
我正在用Rails以下调用返回这个结果是422:
渲染JSON:@ post.errors.to_json,状态:unprocessable_entity
另一个编辑:
下面的请求的截图被Wireshark的通过做出。看起来没有什么与众不同的,但我也从来没有使用过的工具。
下面是相应的十六进制。
您的服务器似乎违反了HTTP规范。状态行定义如下:
From the exception it appears that a non-space character (or two) is between the status code and reason phrase.
OkHttp is looking for ASCII spaces (character #32) between these elements. You can use something like WireShark or maybe Charles to intercept the network traffic and figure out what characters are being used by your HTTP server.
这篇关于java.net.ProtocolException:意外状态行:HTTP / 1.1 422Unprocessable实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!