标签: okhttp

OkHttp 不断收到 StreamResetException:流已重置:当它为 200 时,内部错误

StreamResetException: stream was reset: INTERNAL_ERROR从 OkHttp 得到的。有什么问题?

这是日志。

I/okhttp.OkHttpClient: <-- 200 https://www.example.com/user/list (396ms)
I/okhttp.OkHttpClient: date: Fri, 04 Dec 2020 02:21:35 GMT
I/okhttp.OkHttpClient: content-type: application/json
I/okhttp.OkHttpClient: content-length: 99730
I/okhttp.OkHttpClient: server: nginx/1.18.0
I/okhttp.OkHttpClient: allow: GET, HEAD, OPTIONS
I/okhttp.OkHttpClient: x-frame-options: DENY
I/okhttp.OkHttpClient: x-content-type-options: nosniff
I/okhttp.OkHttpClient: referrer-policy: same-origin
D/okhttp.Http2: << 0x00000003  5792 DATA          
D/okhttp.Http2: << 0x00000003     4 RST_STREAM    
D/okhttp.TaskRunner: Q10092 canceled              : OkHttp ConnectionPool
D/force: okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR
D/okhttp.Http2: >> 0x00000000     8 GOAWAY     
D/okhttp.TaskRunner: Q10096 finished run in 216 ms: …
Run Code Online (Sandbox Code Playgroud)

django android okhttp http2

10
推荐指数
1
解决办法
2万
查看次数

Retrofit + Okhttp是否使用httpCaching作为Android的默认设置?

我用改造okhttp在我们的应用程序之一.

我无法找到Retrofit默认行为的好解释.

如果Okhttp在类路径上,它将自动使用.但据我所知,默认的HttpResponseCache为null.

我是否需要使用Retrofit和Okhttp显式启用缓存?

android http http-caching retrofit okhttp

9
推荐指数
3
解决办法
1万
查看次数

改造"java.net.ProtocolException:意外的状态行",任何人?

我的Android应用程序崩溃了以下堆栈跟踪,但是当我从桌面休息客户端尝试它时它运行良好.有谁知道问题可能是什么?

04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? ---> HTTP GET http://beta2.irealtor.api.iproperty.com.my/Listing?pageSize=10000&orderby=1&order=-1
04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? If-Modified-Since: 1398235278243
04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? User-Agent: Android/0.0.20
04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? Accept: application/json
04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? Authorization: WFdSeW8vOTJ1Z3BoQlBJMk53VGpaekZRY2pCd1pYSlVXUT090
04-23 16:00:50.449  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? ---> END HTTP (0-byte body)
04-23 16:00:50.549  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? ---- ERROR http://beta2.irealtor.api.iproperty.com.my/Listing?pageSize=10000&orderby=1&order=-1
04-23 16:00:50.549  27917-27983/com.iproperty.android.apps.irealtor D/Ireal_IrealtorClient? java.net.ProtocolException: Unexpected status line: {"Data":[],"CustomStatusCode":200,"Status":"success"}HTTP/1.1 200 OK
            at com.squareup.okhttp.internal.http.StatusLine.<init>(StatusLine.java:38)
            at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:150)
            at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:99)
            at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:595)
            at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:381)
            at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:328)
            at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:493)
            at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:71)
            at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358) …
Run Code Online (Sandbox Code Playgroud)

java android retrofit okhttp

9
推荐指数
4
解决办法
1万
查看次数

如何使用Retrofit和OKHttp在下次请求时使缓存路由无效/强制更新?

我正在使用OKHttp客户端的Retrofit来缓存来自JSON API的响应.

这很好用.

但是,如果我在设备上执行导致数据在服务器上更新的操作,我需要一种方法来"使某个特定路由无效",以确保下次请求此数据时,它将从服务器再次而不是现在过时的缓存版本.

目前,我通过在请求的Cache-Control标头中显式调用带有"no-cache"标志的新路由来解决这个问题,但是这迫使我在需要之前下载新数据,如果需要,可能会多次下载采取多个操作,只是为了使缓存保持最新.

有没有办法在我的改造/ OKhttp客户端中标记路由/方法,因为缓存已过期,需要在下次请求时通过网络进行强制更新?

android caching retrofit okhttp

9
推荐指数
3
解决办法
3882
查看次数

当服务器使用Retrofit返回相同的响应时,如何避免解析?

我用来避免解析遍地的服务器响应,如果它也不会改变通过计算响应的哈希值:

public class HttpClient {

    protected OkHttpClient mClient = new OkHttpClient();

    public String get(final URL url, final String[] responseHash)
        throws IOException {
        HttpURLConnection connection = new OkUrlFactory(mClient).open(url);
        InputStream inputStream = null;
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        assert messageDigest != null;
        try {
            // Read the response.
            inputStream = connection.getInputStream();
            byte[] response = readFully(inputStream);
            final byte[] digest = messageDigest.digest(response);
            responseHash[0] = Base64.encodeToString(digest, Base64.DEFAULT);
            return …
Run Code Online (Sandbox Code Playgroud)

response http-caching http-headers retrofit okhttp

9
推荐指数
1
解决办法
1762
查看次数

与模拟器和Web相比,改进了真实Android设备中更慢的响应时间

我正在从Android设备进行一个RESTful API调用以填充列表视图.

我使用swagger codegen来生成我的改造客户端.

Dagger 2用于依赖注入

设备:华硕Zenfone 5

我试图从邮递员,网络和模拟器(genymotion)拨打电话,与真实设备相比,它要快得多.

有趣的是,每当我重新启动手机两到三次请求时,响应时间是正常的,之后变慢.

我在okHTTP中阅读了一些关于gzip压缩的博客并尝试实现但没有效果.

如果有人可以帮助我找出问题,那将会非常有帮助.

android retrofit okhttp dagger-2 retrofit2

9
推荐指数
1
解决办法
5163
查看次数

在OkHttp工作正常的情况下,Retrofit2响应是错误的请求

(编辑我添加了一个小的演示测试)

我是新手Retrofit.我需要做的是XML从服务器检索文件并将其转换为POJO.问题是我的测试服务器上的所有内容都与静态文件完美配合,但是当我在真实服务器上尝试这个时,我无法使用它Retrofit2,但是当我直接使用时它确实有效OkHttp,所以有些东西是错误的生成Request我猜.

编辑:我切换代码使用String转换器只是简单的事情,因为问题只与响应有关.

这是我的基本实现.

public interface ZedoClient {
@retrofit2.http.Headers({
        "User-Agent: Mozilla/5.0 (Linux; Android 5.1; Quattro_L50_HD LMY47D/Quattro_L50_HD)",
        "Cookie : ZCBC=1;FFcat=3533,3,90;FFad=0;FFMChanCap=5345280B3533,3#2605191|0,1#0,24:"
})
@GET("fns.vast")
Call<Vast> getVast(@QueryMap(encoded=true) Map<String, String> options);
Run Code Online (Sandbox Code Playgroud)

我添加了两个Interceptor以便设置headerscookies: AddCookiesInterceptor.class

class AddCookiesInterceptor implements Interceptor {
    private final Headers headers;

    AddCookiesInterceptor(Headers headers) {
        this.headers = headers;
    }
    @Override
    public okhttp3.Response intercept(Chain chain) throws IOException {
        Request.Builder builder = chain.request().newBuilder();
        builder.headers(headers);
        return chain.proceed(builder.build());
    }
}
Run Code Online (Sandbox Code Playgroud)

ReceivedCookiesInterceptor.class …

java retrofit okhttp retrofit2 simple-xml-converter

9
推荐指数
1
解决办法
801
查看次数

java.lang.NoSuchMethodError: 没有虚拟方法 toString(Z)Ljava/lang/String; 在类 Lokhttp3/Cookie 中;或者它的超类

我在一个 Android 项目中使用了改造 (2.7.2) 和 OkHttp 版本 (4.4.0),但我在请求时遇到了崩溃。

依赖项:

kapt("com.squareup.moshi:moshi-kotlin-codegen:1.9.2")
implementation 'com.squareup.moshi:moshi:1.9.2'     
implementation 'com.squareup.retrofit2:retrofit:2.7.2'
implementation 'com.squareup.retrofit2:converter-moshi:2.7.2'

implementation("com.squareup.okhttp3:okhttp:4.4.0")
implementation("com.squareup.okhttp3:okhttp-tls:4.4.0")
implementation "com.squareup.okhttp3:logging-interceptor:4.4.0"
Run Code Online (Sandbox Code Playgroud)

碰撞:

java.lang.NoSuchMethodError: 没有虚拟方法 toString(Z)Ljava/lang/String; 在类 Lokhttp3/Cookie 中;或其超类('okhttp3.Cookie' 的声明出现在 /data/app/com.package-1/base.apk:classes3.dex 中)在 com.facebook 的 okhttp3.JavaNetCookieJar.saveFromResponse(JavaNetCookieJar.java:45) .react.modules.network.ReactCookieJarContainer.saveFromResponse(ReactCookieJarContainer.java:36) 在 okhttp3.internal.http.HttpHeaders.receiveHeaders(HttpHeaders.kt:207) 在 okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:85) ) 在 okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100) 在 okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:74) 在 okhttp3.internal.http.RealInterceptorChain

java android retrofit okhttp react-native

9
推荐指数
2
解决办法
6650
查看次数

Espresso Mock Web 服务器不等待 OkHttp 空闲资源和 Dagger Hilt

我正在尝试使用Espresso和为我的 Fragments 编写 UI 测试MockWebServer。我OkHttp Idling Resource用来告诉 Espresso 等待 API 调用完成。

但不知何故,有时我的测试有效,但有时无效,因为Espresso在服务请求之前就完成了它的工作。所以我的 recyclerView 项目点击测试失败。

我不明白为什么 espresso 不等待 API 调用?任何人都可以帮忙吗?

这是我的测试课

@MediumTest
@HiltAndroidTest
@UninstallModules(PersistenceModule::class, NetworkModule::class)
class MainFragmentTest {

    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    private val mockWebServer = MockWebServer()

    @Inject
    lateinit var okHttp3IdlingResource: OkHttp3IdlingResource

    @Before
    fun setUp() {
        hiltRule.inject()
        // Prepare Mock Web Server
        mockWebServer.start(8080)
        IdlingRegistry.getInstance().register(okHttp3IdlingResource)
    }

    @Test
    fun mainFragmentTest(){

        // Prepare Mock Web Server
        mockWebServer.dispatcher = object : Dispatcher() {
            override fun dispatch(request: …
Run Code Online (Sandbox Code Playgroud)

android okhttp android-espresso mockwebserver dagger-hilt

9
推荐指数
0
解决办法
548
查看次数

找不到 org.junit.jupiter:junit-jupiter:

我试图学习如何使用 OkHTTP。我将库导入到我的项目中,但是当我编译代码时,它会出现此错误。

找不到 org.junit.jupiter:junit-jupiter:。需要者:project :app 在 build.gradle 文件中搜索。

请问我该怎么办。这是我的 build.gradle 下面

plugins {
id 'com.android.application'
}

android {
compileSdk 32

defaultConfig {
    applicationId "com.omolayoseun.saprktesterapp"
    minSdk 23
    targetSdk 32
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard- 
rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

implementation 'com.squareup.okhttp3:okhttp:4.9.1'
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'

}
Run Code Online (Sandbox Code Playgroud)

java android okhttp

9
推荐指数
2
解决办法
2万
查看次数