To a certain website, i am making HTTP head request to get header data using java. I have used the following code to do that.
String url2 = "https://pagalworld.com.se/siteuploads/files/sfd14/6934/Har Har Shambhu Ringtone_320(PagalWorld.com.se).mp3";
String req_method = "HEAD";
HttpsURLConnection conn = null;
try {
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL UrlConnection = new URL(url2);
conn = (HttpsURLConnection) UrlConnection.openConnection();
String host = UrlConnection.getHost().toString()+":80";
conn.setRequestMethod(req_method);
conn.setRequestProperty("Host", host);
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Connection","keep-alive");
conn.setRequestProperty(DownloadApiConfig.USER_AGENT_REQUEST_HEADER, DownloadApiConfig.USER_AGENT_REQUEST_HEADER_VALUE);
System.out.println("Host:Port = "+host);
Map<String,List<String>> data = conn.getRequestProperties();
System.out.println("Connection code : "+conn.getResponseCode());
System.out.println("Connection Msg : "+conn.getResponseMessage());
for(String key:data.keySet()){
System.out.println(key + " " + data.get(key));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
conn.disconnect();
}
Now the problem is, Server is responding with response code 400 (Bad request). But when i am making the same request from postman with same request headers, it gives response code 200 (Ok).
http head request using Postman
Another thing is, if i am making the request with same request headers as before using okhttp client library then also it's responding with response code 200.
Now what's wrong with my code?
I couldn't found any major issue on your code. I've tried to run your code inside one of my Android project. To avoid NetworkOnMainThreadException
I've run the code snippet inside a thread. Then run it and found the expected response header in the log.
callApi()
method inside your project.https://pagalworld.com.se/siteuploads/files/sfd14/6934/Har%20Har%20Shambhu%20Ringtone_320(PagalWorld.com.se).mp3
(replaced SPACE with %20
). There is a chance for BAD request with white space URL.I/System.out: ConnHeadRes: null HTTP/1.1 200 OK
I/System.out: ConnHeadRes: Accept-Ranges bytes
I/System.out: ConnHeadRes: Age 693
I/System.out: ConnHeadRes: CF-Cache-Status HIT
I/System.out: ConnHeadRes: CF-RAY 73f0ccbd1a5169b1-DAC
I/System.out: ConnHeadRes: Connection keep-alive
I/System.out: ConnHeadRes: content-disposition attachment
I/System.out: ConnHeadRes: Content-Length 1221768
I/System.out: ConnHeadRes: Content-Type application/octet-stream
I/System.out: ConnHeadRes: Date Tue, 23 Aug 2022 03:35:42 GMT
I/System.out: ConnHeadRes: Expect-CT max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
I/System.out: ConnHeadRes: last-modified Thu, 11 Aug 2022 14:41:49 GMT
I/System.out: ConnHeadRes: NEL {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
I/System.out: ConnHeadRes: Report-To {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=nywwKM746VO8KiwrIJAIq6hoJ1D8eJphddRHtpP%2BkXxWPQCJayYi23um4V7mlUXd4kdWOXN%2FrXrTN6NA7sZWa%2BzU4L6tCx2v28VAkH51TPNfDVbeHGTHgwY8PCuulIdN3ek%2FloEn"}],"group":"cf-nel","max_age":604800}
I/System.out: ConnHeadRes: Server cloudflare
I/System.out: ConnHeadRes: Strict-Transport-Security max-age=15552000; includeSubDomains; preload
I/System.out: ConnHeadRes: Vary Accept-Encoding
I/System.out: ConnHeadRes: X-Android-Received-Millis 1661225741490
I/System.out: ConnHeadRes: X-Android-Response-Source NETWORK 200
I/System.out: ConnHeadRes: X-Android-Selected-Protocol http/1.1
I/System.out: ConnHeadRes: X-Android-Sent-Millis 1661225741442
I/System.out: ConnHeadRes: x-content-type-options nosniff
I/System.out: ConnHeadRes: x-nginx-upstream-cache-status MISS
USER_AGENT_REQUEST_HEADER
field and value.Map
object.void callApi() {
Thread thread = new Thread(() -> {
try {
String url2 = "https://pagalworld.com.se/siteuploads/files/sfd14/6934/Har Har Shambhu Ringtone_320(PagalWorld.com.se).mp3";
String req_method = "HEAD";
HttpsURLConnection conn = null;
try {
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL UrlConnection = new URL(url2);
conn = (HttpsURLConnection) UrlConnection.openConnection();
String host = UrlConnection.getHost() + ":80";
conn.setRequestMethod(req_method);
conn.setRequestProperty("Host", host);
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("user-agent", "android");
System.out.println("Host:Port = " + host);
Map<String, List<String>> data = conn.getRequestProperties();
System.out.println("Connection code : " + conn.getResponseCode());
System.out.println("Connection Msg : " + conn.getResponseMessage());
for (String key : data.keySet()) {
System.out.println(key + " " + data.get(key));
}
Map<String, List<String>> responseHeader = conn.getHeaderFields();
for (Map.Entry<String, List<String>> entry : responseHeader.entrySet()) {
for (String value: entry.getValue()) {
System.out.println("ConnHeadRes: " + entry.getKey() + " " + value);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
conn.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
}
So, as far I understand I can say, there is no issue in your code.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.