Forum Stats

  • 3,752,071 Users
  • 2,250,455 Discussions
  • 7,867,707 Comments

Discussions

HttpURLConnection setRequestProperty is not setting some key values in the request

User_KZASH
User_KZASH Member Posts: 39 Blue Ribbon

I need to send a custom https header request and I set the the custom keys like this:

con.setRequestProperty("Accept", con.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
con.setRequestProperty("Accept-Language", "ro-RO,ro;q=0.9,en-US;q=0.8,en;q=0.7");
con.setRequestProperty("Cache-Control", "max-age=0");
con.setRequestProperty("Sec-Fetch-Dest", "document");
con.setRequestProperty("Sec-Fetch-Mode", "navigate");
con.setRequestProperty("Sec-Fetch-Site", "none");
con.setRequestProperty("Sec-Fetch-User", "?1");

The problem is that all properties that start with "Sec" are not actually set in the https request.

I tested this with the method getRequestProperty right after setting them with setRequestProperty.

I also tested this by intercepting the https traffic with Fiddler and I can see that the properties that start with "Sec" are not present in the request.

I also tried to set the request property using the method addRequestProperty instead setRequestProperty but the result was the same.

Why isn't Java sending some of the properties?

Simple and complete example:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SetRequestProperty_example {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://xyz.abc");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestProperty("Sec-Fetch-Dest", "document");
            //con.addRequestProperty("Sec-Fetch-Dest", "document"); //same problem appears with addRequestProperty
            String check = con.getRequestProperty("Sec-Fetch-Dest");
            if(check==null) {
                System.err.println("Problem detected");
            } else {
                System.err.println("Problem solved");
            }
        } catch (IOException ex) {
            Logger.getLogger(SetRequestProperty_example.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

This simple code displays "Problem detected", what should I write to display "Problem solved"?

This is weird but if I change the request property name from "Sec-Fetch-Dest" to "SSec-Fetch-Dest" then the property is set fine. This does not solve the problem but I think it could be a piece of useful information.

Thank you.