Last active
March 1, 2021 04:32
-
-
Save SiAust/18d279dd387b79d19b174aaf68c2e4fc to your computer and use it in GitHub Desktop.
Http request java.io.IOException
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class HttpUtils { | |
private static HttpServer server; | |
private static final String CLIENT_ID = "6edb9b1ac21042abacc6daaf0fbc4c4d"; | |
private static final String CLIENT_SECRET = ""; // todo: remove before committing to Github. | |
private static final String REDIRECT_ID = "http://localhost:8080"; | |
public static void startHttpServer() { | |
try { | |
server = HttpServer.create(); | |
server.bind(new InetSocketAddress(8080), 0); | |
server.createContext("/", new HttpHandler() { | |
@Override | |
public void handle(HttpExchange exchange) throws IOException { | |
String query = /*"hey buddy, this is a Java server, wouldn't you know"; */exchange.getRequestURI().getQuery(); | |
exchange.sendResponseHeaders(200, query.length()); | |
exchange.getResponseBody().write(query.getBytes()); | |
exchange.getResponseBody().close(); | |
} | |
}); | |
server.start(); | |
System.out.println("*** Started server ***"); | |
System.out.println("Use this link to request the access code:"); | |
System.out.println("https://accounts.spotify.com/authorize?client_id=6edb9b1ac21042abacc6daaf0fbc4c4d&redirect_uri=http://localhost:8080&response_type=code"); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
/*public static void getResponse() { // get the response from the server?! | |
try { | |
HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(15)).build(); | |
HttpRequest request = HttpRequest.newBuilder() | |
.uri(URI.create("http://localhost:8080")) | |
.GET() | |
.build(); | |
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); | |
System.out.println(response.body()); | |
} catch (IOException | InterruptedException e) { | |
e.printStackTrace(); | |
} finally { | |
server.stop(1); | |
} | |
}*/ | |
public static CompletableFuture<String> get() { | |
HttpClient client = HttpClient.newHttpClient(); | |
HttpRequest request = HttpRequest.newBuilder() | |
.uri(URI.create("http://localhost:8080")) | |
.GET() | |
.build(); | |
return client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) | |
.thenApply(HttpResponse::body); | |
} | |
// Main.java:67 | |
try { | |
System.out.println(completableFuture.get()); // line 67 | |
} catch (InterruptedException | ExecutionException e) { | |
e.printStackTrace(); | |
} | |
/* Stacktrace | |
java.util.concurrent.ExecutionException: java.io.IOException: HTTP/1.1 header parser received no bytes | |
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) | |
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999) | |
at Main.auth(Main.java:67) | |
at Main.play(Main.java:29) | |
at Main.main(Main.java:10) | |
Caused by: java.io.IOException: HTTP/1.1 header parser received no bytes | |
at java.net.http/jdk.internal.net.http.common.Utils.wrapWithExtraDetail(Utils.java:291) | |
at java.net.http/jdk.internal.net.http.Http1Response$HeadersReader.onReadError(Http1Response.java:656) | |
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.checkForErrors(Http1AsyncReceiver.java:297) | |
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.flush(Http1AsyncReceiver.java:263) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198) | |
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) | |
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) | |
at java.base/java.lang.Thread.run(Thread.java:834) | |
Caused by: java.io.EOFException: EOF reached while reading | |
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver$Http1TubeSubscriber.onComplete(Http1AsyncReceiver.java:591) | |
at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$ReadSubscription.signalCompletion(SocketTube.java:632) | |
at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.read(SocketTube.java:833) | |
at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowTask.run(SocketTube.java:175) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271) | |
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224) | |
at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.signalReadable(SocketTube.java:763) | |
at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$ReadEvent.signalEvent(SocketTube.java:941) | |
at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowEvent.handle(SocketTube.java:245) | |
at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.handleEvent(HttpClientImpl.java:957) | |
at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.lambda$run$3(HttpClientImpl.java:912) | |
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) | |
at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:912) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi. I am also facing same issue.
Did you find it's solution?