Как создать cookie и использовать его в HttpURLConnection? - PullRequest
3 голосов
/ 09 мая 2019

У меня есть следующий код Python, который создает cookie и добавляет его в сеанс. Каким будет эквивалентный Java-код для него с использованием HttpURLConnection? Я в основном хочу сделать HTTP-запрос POST, используя сгенерированный cookie.

    session = requests.session()
    session.auth = (username, password)
    try:
        token = session.get(SITEMINDER_URL % server, verify=False)
        session.cookies.update(dict(SMSESSION=json.loads(token.content)['SMSESSION']))
    except Exception as ex:
        raise Exception("Failed in authenticating with siteminder", ex)
    response = session.post(api_url, headers=headers, verify=False, json=data)

Ответы [ 4 ]

0 голосов
/ 18 мая 2019

Попробуйте:

    URL url = new URL("http://www.example.com");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();

    conn.setRequestProperty("Cookie", "name1=value1; name2=value2");

    conn.connect();
0 голосов
/ 13 мая 2019

По моему мнению, вы можете просто создать объект HttpUrlConnection, назначив файлы cookie List следующим образом:

List<String> cookies = new ArrayList<>();
//Or using a map With entries: Key and value for each cookie
cookies.add("User-Agent=MyUserAgent"); //etc...
URL site = new URL("https://myurl.com");
HttpsURLConnection conn = (HttpsURLConnection) site.openConnection();
for (String string: cookies) {
        conn.setRequestProperty("Cookie", string);
}

Однако это самый простой, но не лучший способ сделать это.

0 голосов
/ 15 мая 2019

Чтобы получить более высокую абстракцию для Cookie, используйте классы CookieManager и CookieStore. Вот пример:

HttpURLConnection connection
CookieManager cookieManager = new CookieManager();
HttpCookie cookie = new HttpCookie("cookieName","cookieValue");

cookieManager.getCookieStore().add(null,cookie);

connection.setRequestProperty("Cookie", String.join( ";", cookieManager.getCookieStore().getCookies()));  
0 голосов
/ 09 мая 2019

Вы могли бы использовать что-то вроде этого:

HttpURLConnection httpconn = < some source to get a HttpURLConnection >;
String cookieName = "SMSESSION"; // note this is the default but SM can use other prefixes
String cookieValue = < your token content >;
httpurl.setRequestProperty("Cookie", cookieName + "=" + cookieValue);

Кроме того, из javadocs: ПРИМЕЧАНИЕ: HTTP требует, чтобы все свойства запроса, которые могут по закону иметь несколько экземпляров с одним и тем же ключом, используют синтаксис списка через запятуючто позволяет добавлять несколько свойств в одно свойство

. Это заставляет меня указать, что прямое использование HttpUrlConnection действительно неуклюже.Я рекомендую вам взглянуть на клиентскую библиотеку HTTP, такую ​​как Apache HTTP Client http://hc.apache.org/httpcomponents-client-ga/

...