Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting H3_INTERNAL_ERROR on calling via h3 preference #33

Open
rajat-ventura opened this issue Oct 26, 2024 · 13 comments
Open

Getting H3_INTERNAL_ERROR on calling via h3 preference #33

rajat-ventura opened this issue Oct 26, 2024 · 13 comments
Labels
bug Something isn't working

Comments

@rajat-ventura
Copy link

rajat-ventura commented Oct 26, 2024

I am calling NGINX with http3 enabled and cronet is working fine as well as a request client. We are doing a PoC and are trying to use rhttp instead because of its speed. Could you please check if my implementation is wrong?

`
rAuthInvest = await RhttpCompatibleClient.create(
interceptors: [TimeInterceptor()],
settings: ClientSettings(
httpVersionPref: HttpVersionPref.http3,
timeoutSettings: TimeoutSettings(
timeout: Duration(seconds: 30),
connectTimeout: Duration(seconds: 10),
keepAliveTimeout: Duration(seconds: 60),
),
throwOnStatusCode: true,
)
);

Future orderbookHeaders(
{Function(dynamic data)? onSuccess,
Function(dynamic error)? onError,
Map<String, String> headers = const {},
Map requestData = const {}}) async {

try {
  Map<String, String> h = {
  "Content-type": "application/json",
  "Access-Control-Allow-Origin": "*",
  "User-Agent": "Dart/3.4",
  // "Accept-Encoding": ['gzip', 'br'],
  "Authorization": "Bearer ${prefUtils.getAuthtoken()}",
  "session_id": prefUtils.getSsoSessionId(),
  "x-client-id": prefUtils.getclientid(),
};
  var response;
  try {
    response = await HTTP3.rAuthInvest.post(
        Uri.parse("$ordersUrl/txn/orderbook/v1/header"),
        headers: h,
        body: jsonEncode(requestData));
  } catch(e) {
    print(e.toString());
  }
  if (response.statusCode < 400 && onSuccess != null) {
    onSuccess(response.body);
  } else {
    onError!(
      response.bodyMap.containsKey("message")
          ? response.bodyMap["message"]
          : 'Something Went Wrong!',
    );
  }
} catch (error) {
  onError!(error);
}

}
`

Screenshot 2024-10-26 at 11 07 26 AM

any support would be really helpful

@rajat-ventura
Copy link
Author

rajat-ventura commented Oct 26, 2024

I just dug a bit deeper and this line is throwing the error

final rustResponse = await responseCompleter.future;
in request.dart line 160
Screenshot 2024-10-26 at 11 52 56 AM

@Tienisto
Copy link
Owner

H3_INTERNAL_ERROR seems like an error on the Rust side.

@rajat-ventura
Copy link
Author

is there any way i can look into the RCA on what was wrong from my end? and maybe try to fix it

@Tienisto
Copy link
Owner

An option would be to run write the exact request in Rust to check if Rhttp doesn't do anything wrong. If it still occurs, then maybe there is a solution in reqwest or h3 Github repo.

@Tienisto Tienisto added the bug Something isn't working label Dec 9, 2024
@denonzhu
Copy link

can resolve by this:
image
hyperium/h3#206

@scoobhidu
Copy link

Thanks @denonzhu did your suggested changes work, if you tried changing on a fork or something?

@denonzhu
Copy link

work for me ,you can do it like this:
image
image
image
image

@scoobhidu
Copy link

thanks for the help @denonzhu, i'll try it next week once I resume my work

meanwhile @Tienisto can you please check if we can upgrade the version of reqwest crate? because I can see in their master branch they have removed the grease dependency

Uploading Screenshot 2024-12-17 at 1.21.13 PM.png…

@Tienisto
Copy link
Owner

Hello @scoobhidu , your screenshot is unfortunately not loading.

Rhttp already uses the latest version (0.12.9) https://github.com/Tienisto/rhttp/blob/main/rhttp%2Frust%2FCargo.toml#L17

I am thinking of adding the workaround by @denonzhu but I am not sure if it has bad side effects or if we should wait if the issue is fixed by h3.

@scoobhidu
Copy link

oh sorry @Tienisto, the screenshot was of https://github.com/seanmonstar/reqwest/blob/master/src/async_impl/h3_client/connect.rs

the file does not contain the grease dependency in remote_connect method as highlighted in denonzhu's screenshot

@scoobhidu
Copy link

@denonzhu's suggested fix seems to be working as from H3_INTERNAL_ISSUE I have now started getting another issue where I keep getting this

V/reqwest::async_impl::..( 4760): did not find connection ("http", invest.venturasecurities.uat) in pool so connecting...
I/flutter ( 4760): http://invest.venturasecurities.uat/market/v1/mktstatus Time taken: 2
I/flutter ( 4760): [RhttpUnknownException] reqwest::Error { kind: Request, source: "HTTP/3 connecting already in progress for (\"http\", invest.venturasecurities.uat)" }

This keeps happening on a loop with recurrent requests and same error

Can you please help in resolving this?

@scoobhidu
Copy link

hi @Tienisto

I tried building the same logic using reqwest

let client = Client::builder()
    .http3_prior_knowledge()
    .build()?;

let response = client
    .get("https://http3.venturasecurities.com/indices/v1/viewall")
    .headers(headers)
    .send()
    .await?;

I get the following response
Error: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("http3.venturasecurities.com")), port: None, path: "/indices/v1/viewall", query: None, fragment: None }, source: hyper::Error(Connect, Custom { kind: Other, error: Custom { kind: InvalidData, error: AlertReceived(NoApplicationProtocol) } }) }

@Tienisto
Copy link
Owner

Tienisto commented Jan 6, 2025

You should reach out for https://github.com/seanmonstar/reqwest
Errors in reqwest are out of scope in rhttp.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants